Chapter 31. 透明数据加密

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

TDE具有以下特点:

在启动期间,服务器可以访问初始化数据库的密钥,并通过特殊的配置参数提供加密密钥,该参数指定了实现特殊安全要求的自定义密钥设置命令。TDE在内部使用GmSSL的标准加密算法SM4来加密/解密磁盘上的数据块。

使用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能够执行此程序:

    chmod +x /somewhere/provide_key.sh
    

创建一个数据库实例:

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

您可以使用lt_controldata确定当前实例是否已使用透明加密。 在清单的末尾,您可以找到加密详细信息。

lightdb_encryption_key_command的GUC参数将存在于lightdb.conf配置文件中,确保在每次数据重新启动后将再次读取TDE密钥。

请注意,我们目前不支持对现有集群进行原地加密。您需要将其备份并重新加载到加密实例中,或使用逻辑复制在线执行迁移。