存储加密
KaiwuDB 提供了透明存储加密功能,用户无需更改应用程序代码即可通过 --store-encryption
启动参数对关系数据库的存储路径进行加密、解密、存储密钥更新和算法更换等操作。
KaiwuDB 支持国密 SM4 和 AES128 两种加密算法,用户可以根据需求选择适合的加密算法,以满足不同的安全要求。
启用存储加密功能后,KaiwuDB 将自动生成数据加密密钥,并使用该密钥加密用户数据,数据密钥默认 7 天自动轮换一次,用户可通过--store-encryption
设置数据密钥的轮换周期。
存储加密功能默认关闭,用户生成存储密钥文件,通过 --store-encryption
启动参数指定加密路径、存储密钥和加密算法后,才能启用该功能。
启用存储加密
KaiwuDB 支持在部署时启用加密功能,也支持对现有关系数据库启用加密。
部署时启用存储加密
有关初始部署时启用加密功能的具体步骤,参见以下部署文档:
对现有数据库启用存储加密
以下步骤介绍如何在 KaiwuDB 启动后,通过重启节点启用存储加密功能。
说明
现有关系数据库启用加密功能后,新写入的文件会立即加密,已有文件会通过数据库的正常压缩和维护流程逐步加密。
前提条件:
- 已部署和启动 KaiwuDB。
- 用户为
root
用户或者拥有sudo
权限的普通用户。
步骤:
在集群中的每个节点执行以下操作:
登录节点,进入
kwbase
脚本所在目录。生成存储密钥文件:
使用
kwbase
命令./kwbase gen encryption-key -s 128 <key-path>
使用
openssl
命令openssl rand -out <key-path> 48
停止 KaiwuDB 服务。
systemctl stop kaiwudb
在启动命令中指定加密算法和存储密钥文件。
提示:
非安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,key=<key-path>,cipher=<cipher>,rotation-period=<period> --insecure
TLS 安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,key=<key-path>,cipher=<cipher>,rotation-period=<period> --certs-dir=<certs-path>
TLCP 安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,key=<key-path>,cipher=<cipher>,rotation-period=<period> --certs-dir=<certs-path> --tlcp
参数说明:
--store=<storage-path>
:指定数据库的主存储目录,需与部署时指定的目录一致。--store-encryption
: 指定待加密的存储目录、存储密钥路径和加密算法,其中:storage-path
:加密目录路径,必须位于--store
指定的主存储目录内或者与--store
指定的目录相同。key-path
:存储密钥路径。cipher
:加密算法,支持sm4
和aes
。period
:可选参数,指定数据密钥轮换周期,支持的单位包括d
(天)、h
(小时)和s
(秒),默认单位为秒,未指定时,默认轮换周期为 7 天。
--certs-dir=<certs-path>
: 安全部署模式下指定证书路径。
更换存储密钥或算法
KaiwuDB 支持在不中断业务的情况下更换存储密钥,切换加密算法。
前提条件:
用户为
root
用户或者拥有sudo
权限的普通用户。如需更换存储密钥,需生成新的存储密钥。
使用
kwbase
命令./kwbase gen encryption-key -s 128 <key-path>
使用
openssl
命令openssl rand -out <key-path> 48
步骤:
在集群中的每个节点执行以下操作:
登录节点,进入
kwbase
脚本所在目录。停止 KaiwuDB 服务。
systemctl stop kaiwudb
在启动命令中根据需要指定原存储密钥、新存储密钥、原加密算法和新加密算法。
提示:
非安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,key=<key-path>,old-key=<old-key-path>,cipher=<cipher>,old-cipher=<old-cipher>,rotation-period=<period> --insecure
TLS 安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,key=<key-path>,old-key=<old-key-path>,cipher=<cipher>,old-cipher=<old-cipher>,rotation-period=<period> --certs-dir=<certs-path>
TLCP 安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,key=<key-path>,old-key=<old-key-path>,cipher=<cipher>,old-cipher=<old-cipher>,rotation-period=<period> --certs-dir=<certs-path> --tlcp
参数说明:
--store=<storage-path>
:指定数据库的主存储目录。注意:主存储目录应与部署时指定的存储目录保持一致。--store-encryption
: 指定加密的路径、存储密钥路径和加密算法,其中:storage-path
:加密的目录路径,必须位于--store
指定的主存储目录内或者与--store
指定的目录相同。key-path
:新存储密钥路径。old-key-path
:可选参数,指定原有存储密钥路径,更新存储密钥时必须指定该参数。cipher
:新加密算法,支持sm4
和aes
。old-cipher
: 可选参数,指定原有加密算法,支持sm4
和aes
,更换算法时必须指定该参数。rotation-period
:可选参数,指定数据密钥轮换周期,支持的单位包括d
(天)、h
(小时)和s
(秒),默认单位为秒,未指定时,默认轮换周期为 7 天。
--certs-dir=<certs-path>
: 安全部署模式下指定证书的路径。
解密目录
如果需要将加密数据转换回明文存储,请按以下步骤操作。
前提条件:
- 用户为
root
用户或者拥有sudo
权限的普通用户。 - 已保留当前使用的加密存储密钥。
步骤:
在集群中的每个节点执行以下操作:
登录节点,进入
kwbase
脚本所在目录。停止 KaiwuDB 服务。
systemctl stop kaiwudb
在启动命令中指定原存储密钥、原加密算法和解密算法。
提示:
非安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,old-key=<old-key-path>,cipher=plain,old-cipher=<old-cipher> --insecure
TLS 安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,old-key=<old-key-path>,cipher=plain,old-cipher=<old-cipher> --certs-dir=<certs-path>
TLCP 安全模式
./kwbase start --store=<storage-path> --store-encryption=path=<storage-path>,old-key=<old-key-path>,cipher=plain,old-cipher=<old-cipher> --certs-dir=<certs-path> --tlcp
参数说明:
--store=<storage-path>
:指定数据库的主存储目录。注意:主存储目录应与部署时指定的存储目录保持一致。--store-encryption
: 指定加密目录路径、存储密钥路径和加密算法,其中:storage-path
:待解密的目录路径,必须位于--store
指定的主存储目录内或者与--store
指定的目录相同。old-key-path
:原有存储密钥路径。cipher
:加密算法,设置为plain
时表示取消加密。old-cipher
: 原有加密算法,支持sm4
和aes
。
--certs-dir=<certs-path>
: 安全部署模式下指定证书的路径。