LightDB对TDE透明数据加密的支持

透明数据加密(Transparent Data Encryption)是将构成数据库集群的所有文件以加密格式(静态数据加密)安全的存储在磁盘上,然后从磁盘读取块时对其进行解密。数据在内存中是未加密的。

当前LightDB(22.1及以后版本)已支持了TDE,在启动期间服务器可以访问初始化数据库的密钥,通过一个特殊的配置参数来提供加密密钥,该参数指定了一个用于实现特殊安全要求的自定义密钥设置命令。TDE内部使用行业标准的国密加密算法对磁盘上的数据块进行加密/解密。

使用lt_initdb通过-K选项传入TDE密钥。在创建数据库实例之前,必须编写一些代码以确保在启动和实例创建期间数据库可以读取密钥。密钥必须是一个 32 字节的十六进制字符串,否则初始化实例时会报错:

 fatal: encryption key is too short, should be a 32 character hex key

下面是一个简单的示例:

cat /somewhere/provide_key.sh
#!/bin/sh
echo 882fb7c12e80280fd664c69d2d636913

所需要的只是一个打印标准输出密钥的程序,确保 LightDB 能够执行这个程序(注意:不是必须编写 shell 脚本——可以使用任何类型的可执行文件,例如 C、Go 或 Python):

chmod +x /somewhere/provide_key.sh

创建数据库实例:

initdb -p 5432 -D ./data -K /somewhere/provide_key.sh

也可以通过lt_controlData来判断当前实例是否已经使用了透明加密:

同样的,在lightdb.conf配置文件中会存在lightdb_encryption_key_command的GUC参数,该参数即保证了数据每次重启后均会重新读取TDE密钥:

 

这样,后续的数据库操作在写磁盘时均会对数据整块的进行加密,读盘时进行解密。我们也可以对比同一张表在不适用TDE和使用TDE加密两种情况下在磁盘上的存储情况:

左边为未使用透明加密的实例中该表二进制存储,右边为使用了透明加密的实例中该表二进制存储:

 注:目前不支持对现有集群进行就地加密。需要转储并重新加载到加密实例。

 

posted @ 2022-06-09 15:00  小小罗的背影  阅读(94)  评论(0编辑  收藏  举报