GBase 8a
其他
文章
精选
如何创建一个使用SM4加密存储的表?加密密钥是如何管理和存储的?
发表于2026-03-27 10:19:2430次浏览3个评论
在 GBase 8a MPP Cluster 中创建一个使用 SM4 加密存储的表,需要经过 选择算法、创建密钥证书、定义加密表 三个核心步骤。加密密钥通过 密钥证书 进行集中管理,并以文件形式分布式存储在集群各节点上。
一、创建使用 SM4 加密存储的表的完整步骤
步骤1:确认并选择 SM4 加密算法
在创建加密表之前,必须通过集群参数 gbase_encrypt_new_mode 明确选择加密算法。此选择一旦生效,后续创建的加密表将使用该算法,且不支持切换。
-- 设置集群默认加密算法为国密SM4
-- 注意:参数值可能为 'SM4' 或 'SMS4',请以实际版本为准
SET GLOBAL gbase_encrypt_new_mode = 'SM4';
“gbase_encrypt_new_mode 参数选择算法,选择后不支持切换”。步骤2:创建密钥证书
加密功能依赖于密钥证书。证书分为明文密钥和密文密钥两种类型。
-- 创建密文密钥证书(推荐,更安全)。需要提供用户口令。
CREATE ENCRYPTION CERTIFICATE my_sm4_cert
TYPE = CIPHERED
PASSWORD = 'YourStrongPassword123!';- 明文密钥证书:无需口令,密钥明文存储。创建命令为
TYPE = PLAIN。 - 密文密钥证书:需要口令,密钥被口令加密后存储。口令需符合集群密码策略(如
password_min_length)。 - 证书存储:证书文件(如
certificate.crt)会自动分发并存储在每个gcluster和gnode节点的$GBASE_HOME/config/目录下。
步骤3:创建带加密属性的表
在 CREATE TABLE 语句中,使用 ENCRYPT 关键字为表或列添加加密属性。
-- 示例1:创建表级加密表(整个表的所有列均加密)
CREATE TABLE encrypted_whole_table (
id INT,
sensitive_data VARCHAR(200),
create_time DATETIME
) ENCRYPT;
-- 示例2:创建列级加密表(仅对特定列加密)
CREATE TABLE customer_info (
user_id INT,
name VARCHAR(100),
id_card_no VARCHAR(20) ENCRYPT, -- 仅加密身份证号列
phone VARCHAR(20) ENCRYPT, -- 仅加密手机号列
email VARCHAR(50)
);
关键限制:
不支持
ALTER TABLE修改加密属性。加密必须在建表时指定。- 加密列的数据类型需符合要求(通常支持数值、字符、日期等)。
步骤4:初始化密钥并开始使用
创建表后,系统会自动或手动初始化密钥,之后即可正常进行 INSERT、SELECT 等操作。
对于密文密钥证书,在执行DML前需先“打开”证书:
OPEN ENCRYPTION CERTIFICATE my_sm4_cert PASSWORD = 'YourStrongPassword123!';关闭证书后,对加密列的DML操作将失效:
CLOSE ENCRYPTION CERTIFICATE my_sm4_cert;
二、加密密钥的管理与存储机制
GBase 8a 采用 “全局统一密钥 + 分布式证书存储” 的管理模式。
1. 密钥的生成与存储
- 生成:密钥在创建证书时生成,可以是随机生成或手动输入。
- 存储形式:密钥被保存在 密钥证书文件(如
certificate.crt)中。 存储位置:该证书文件在集群每个节点(所有GCluster和GNode)的
config目录下均有一份副本。
2. 密钥的类型与转换
| 类型 | 特点 | 口令要求 | 转换支持 |
|---|---|---|---|
| 明文密钥 | 密钥以明文形式存储,无需口令即可使用。 | 无 | 支持转换为密文密钥。
|
| 密文密钥 | 密钥被用户口令加密后存储,安全性更高。 | 必须提供口令,且需符合密码规则。 | 支持转换为明文密钥。 |
- 转换命令:
ALTER ENCRYPTION CERTIFICATE ... CONVERT TO ...
3. 密钥的管理操作
- 备份:必须备份证书文件。一旦丢失或损坏,加密数据将无法解密。
状态查询:
-- 查看所有密钥证书状态 SELECT * FROM information_schema.encryption_certificate_status;- 口令修改:支持修改密文密钥证书的口令。
- 打开/关闭:控制密文密钥证书的可用状态。
4. 密钥使用的安全规则
- 全局唯一性:整个集群实例使用同一个密钥证书来加解密所有加密表。
- 口令责任:对于密文密钥,用户必须牢记口令,系统不存储也无法找回。
- 文件安全:证书文件本身需通过操作系统权限进行保护(如
chmod 600)。 - 合规性:如果启用了密码强度策略,则密文密钥的口令必须符合该策略。
三、重要限制与注意事项
算法不可逆:一旦使用
gbase_encrypt_new_mode选定算法(AES或SM4),无法切换。- 证书不可更改:密钥证书创建后不可更改,只能通过创建新证书来更换密钥(涉及数据重加密)。
- 功能限制:
- 加密表不支持DBLink操作。
- 加密列不支持作为分布列。
- 加密操作是软加密,对性能有轻微影响(文档称性能影响小于5%)。
- 备份与灾备:在制定备份恢复或容灾方案时,必须将密钥证书作为关键元数据一并备份和同步。
四、总结
创建SM4加密存储表的核心流程是:设算法 -> 建证书 -> 建表。密钥管理的关键在于:
- 集中管理,分布式存储:一个全局密钥,证书文件分发到所有节点。
- 安全分离:密钥(证书文件)与加密数据物理分离存储。
- 责任明晰:密文密钥的口令由用户自行保管,符合安全最佳实践。
通过这套机制,GBase 8a 在提供透明、高效的数据列加密能力的同时,也确保了密钥管理的安全性与合规性,满足数据安全存储的法规要求。
热门帖子
- 12025-12-01浏览数:182110
- 22023-05-09浏览数:24376
- 42023-09-25浏览数:17591
- 52020-05-11浏览数:16623