注册
DM8加密测试常用指令速查
专栏/技术分享/ 文章详情 /

DM8加密测试常用指令速查

JcRapunzel 2026/09/18 359 1 0
摘要

一、国密算法支持查看

来源:《DM8 安全管理》第 8 章 加密引擎

序号 指令 一句话说明
1 SELECT * FROM V$CIPHERS; 查看 DM 支持的全部内置加密/散列算法,确认国密 SM 系列算法已注册。
2 SELECT * FROM V$EXTERNAL_CIPHERS; 查看第三方加密算法(OPENSSL_SM4/SM3、渔翁 FM_SM1/SM2/SM3/SM4/SM6 等)及其所在动态库、有效性(VALID=Y 才可用)。
3 SELECT NAME FROM V$EXTERNAL_CIPHER_LIBS; 查看已加载的第三方加密引擎名,供 dminit 的 EXTERNAL_CRYPTO_NAME / RANDOM_CRYPTO 参数引用。
4 SELECT CYT_NAME FROM V$CIPHERS WHERE CYT_TYPE=4; 列出散列算法(如 OPENSSL_SM3),供列加密 HASH WITH 子句选用。

二、建库初始化(全库加密 / 日志加密 / 外部加密引擎)

来源:《DM8_dminit 使用手册》第 4 章、《DM8 安全管理》第 7.1.1 节;此类参数在建库时指定、建库后不可修改

序号 指令 一句话说明
1 ./dminit PATH=/dm/data ENCRYPT_NAME=OPENSSL_SM4_CBC 建库时指定全库加密算法为国密 SM4,所有数据页密文落盘,密钥由 DM 自动生成。
2 ./dminit PATH=/dm/data RLOG_ENCRYPT_NAME=OPENSSL_SM4_CBC 建库时指定联机日志/归档日志文件加密算法为国密 SM4(不指定则不加密)。
3 ./dminit PATH=/dm/data PAGE_ENC_SLICE_SIZE=4096 设置数据页加密分片大小(可选 0/512/4096 字节),配合全库加密使用。
4 ./dminit PATH=/dm/data EXTERNAL_CRYPTO_NAME=<加密引擎名> 指定服务器根密钥(SVR_KEY)的加密引擎(外部加密机/加密卡/UKEY),缺省用磁盘文件 dm_service.prikey。
5 ./dminit PATH=/dm/data RANDOM_CRYPTO=<加密引擎名> 指定随机数算法所在加密引擎,未指定或引擎不存在时使用 OPENSSL 软件随机数。
6 ./dminit PATH=/dm/data EXTERNAL_CIPHER_NAME=OPENSSL_SM4_CBC 设置库默认加密算法,备份、建表等未显式指定算法时采用该算法。
7 SELECT SF_GET_ENCRYPT_NAME(); 查询当前库的全库加密算法名,未使用全库加密时返回 NULL。
8 SELECT SF_GET_PARA_VALUE(2,'RLOG_ENC_ID'); 查询日志文件加密算法的 ID。

三、表空间与表列存储加密(透明 / 半透明 / 非透明)

来源:《DM8 安全管理》第 7 章 存储加密、《DM8_SQL 语言使用手册》建表/建用户语法

序号 指令 一句话说明
1 CREATE TABLESPACE TS1 DATAFILE 'TS1.DBF' SIZE 128 ENCRYPT WITH OPENSSL_SM4_CFB_V1 BY "密码"; 创建表空间时指定国密 SM4 透明加密(默认 PAGE_ENC_SLICE_SIZE=4096 时仅支持不膨胀的 CFB_V1/OFB_V1;CBC 等膨胀算法不可用于表空间加密)。
2 CREATE TABLE T(C1 INT, C2 VARCHAR(50) ENCRYPT WITH OPENSSL_SM4_CBC); 建表时对指定列做国密 SM4 透明加密,DML 过程中系统自动加解密。
3 CREATE TABLE T(C1 INT, C2 VARCHAR(50) ENCRYPT WITH OPENSSL_SM4_CBC HASH WITH OPENSSL_SM3 SALT); 列透明加密并附加 SM3 散列做完整性校验,数据被非法修改时可被识别。
4 CREATE TABLE T(C1 INT ENCRYPT MANUAL); 半透明加密列:以当前用户存储密钥加密,用户仅能看到自己插入的数据。
5 CREATE TABLE T(C1 INT ENCRYPT WITH OPENSSL_SM4_CBC MANUAL USER (USER01,USER02)); 按列半透明加密,仅指定可见用户能查到明文,其他用户查询结果为 NULL。
6 CREATE USER U1 IDENTIFIED BY "密码" ENCRYPT BY "存储密钥"; 创建用户时指定其存储加密密钥(用于半透明加密,缺省由系统自动生成)。
7 SP_SET_PARA_VALUE(1,'AUTO_ENCRYPT',1); 打开“手动输入列存储密钥”开关,使用 AUTO BY / BY <列存储密钥> 前必须先设置。
8 SELECT CFALGORITHMSENCRYPT('明文', &lt;算法ID>, '密钥'); 非透明加密:应用自行调用加密函数加密数据,算法 ID 通过 V$CIPHERS 查询。
9 SELECT CFALGORITHMSDECRYPT(&lt;密文>, &lt;算法ID>, '密钥'); 非透明解密:以加密时相同的算法 ID 与密钥解密密文。
10 CREATE OR REPLACE PROCEDURE proc WITH ENCRYPTION(a IN INT) AS BEGIN ... END; 对存储过程/存储函数/触发器/包/类等对象定义加密(对象名后加 WITH ENCRYPTION)。

四、通信加密(SSL / 商密 TLCP / 应用层消息包加密)

来源:《DM8 安全管理》第 6 章 通信加密;ENABLE_ENCRYPT 取值:0 不加密、1 双向认证+加密、2 仅认证、4 仅加密、5 单向认证+加密、6 商密 TLCP 认证加密。证书放置:服务器 $DM_HOME/bin/server_ssl(TLCP 用 server-enc.crt/server-enc.key/server-sign.crt/server-sign.key),客户端 $DM_HOME/bin/client_ssl/<用户名>

序号 指令 一句话说明
1 SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',6); 开启商密 TLCP 认证加密(国密 SM2 签名/加密证书双向验证并加密通信),静态参数,重启生效。
2 SP_SET_PARA_VALUE(2,'ENABLE_ENCRYPT',1); 开启 SSL 双向认证+加密(通用 SSL 证书,密码套件由协议自动协商)。
3 SP_SET_PARA_VALUE(2,'MIN_SSL_VERSION',0x0303); 设置允许连接的最低 TLS 版本为 TLSv1.2(0x0304 为 TLSv1.3),静态参数,重启生效。
4 SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT'; 查询 ENABLE_ENCRYPT 参数的当前取值。
5 SELECT para_name, para_value FROM V$DM_INI WHERE para_name='ENABLE_ENCRYPT'; 确认 SSL/TLCP 通信加密是否已开启成功。
6 disql SYSDBA/密码@localhost:5236#"{ssl_path=D:\dmdbms\bin\client_ssl\SYSDBA,ssl_pwd=证书密码}" 客户端带 SSL/TLCP 证书目录(ssl_path)与证书密码(ssl_pwd)连接数据库。
7 SELECT SESS_ID, USER_NAME, PORT_TYPE FROM V$SESSIONS; 查看会话连接类型,PORT_TYPE=7 表示国密 GmSSL 连接。
8 SP_SET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME','OPENSSL_SM4_CBC'); 开启基于应用层的消息包加密(国密 SM4,密钥由 DH 算法协商),静态参数,重启生效。
9 SELECT CYT_NAME FROM V$CIPHERS WHERE (CYT_TYPE=1 OR CYT_TYPE=2) AND (WORK_MODE!='ECB_NOPAD' AND WORK_MODE!='CBC_NOPAD'); 列出可用于 COMM_ENCRYPT_NAME 应用层消息包加密的算法名(分组/流加密且非 NOPAD 模式)。

五、备份加密

来源:《DM8 备份与还原》第 1 章;加密类型 WITH ENCRYPTION:0 不加密、1 简单加密(仅设口令,内容明文)、2 完全数据加密(密文存储),缺省 1

序号 指令 一句话说明
1 BACKUP DATABASE BACKUPSET '/dm/backup/db1' IDENTIFIED BY "密码" WITH ENCRYPTION 2 ENCRYPT WITH OPENSSL_SM4_CBC; 库全量备份并做国密 SM4 完全加密,备份集以密文存储(不指定 ENCRYPT WITH 时默认 AES256_CFB)。
2 BACKUP DATABASE BACKUPSET '/dm/backup/db2' IDENTIFIED BY "密码" WITH ENCRYPTION 1; 简单加密备份:仅为备份集设置口令,文件内容仍以明文存储。
3 BACKUP TABLESPACE TS1 BACKUPSET '/dm/backup/ts1' IDENTIFIED BY "密码" ENCRYPT WITH OPENSSL_SM4_CBC; 表空间备份加密(表备份、归档备份等语句写法类似)。
4 (增量备份约束)增量备份的加密密码、加密类型与加密算法必须与基备份保持一致;基备份未加密则增量备份也不能加密。 增量备份加密一致性要求,不满足时报错。

六、登录用户名密码增强加密(dmkey,RSA 非对称)

来源:《DM8 安全管理》第 11 章;服务端用私钥解密、客户端用公钥加密

序号 指令 一句话说明
1 dmkey PATH=D:\aa pubkey=test.pubkey 生成登录加解密公钥文件(test.pubkey)与私钥文件(dm_login.prikey,固定文件名)。
2 dmkey PRIKEY=D:\aa\dm_login.prikey 查看私钥信息(版本号、Guid、生成时间),用于校验公钥/私钥是否匹配(Guid 相同即匹配)。
3 ./dmkey HELP 查看 dmkey 工具的版本信息与全部参数说明。
4 设置 INI 参数 FORCE_CERTIFICATE_ENCRYPTION=1(将私钥放入 SYSTEM_PATH 目录) 非加密通信时强制对登录用户名密码做证书加密,服务器启动时用私钥解密。
5 dm_svc.conf 中配置 LOGIN_CERTIFICATE=(公钥文件路径) 客户端指定登录加密公钥文件位置,配置后即开启客户端证书加密用户名密码模式。

七、UKEY 身份鉴别

来源:《DM8 安全管理》第 8.3 节;需要厂商提供 UKEY 动态库并放置于 bin 及 external_crypto_libs 目录

序号 指令 一句话说明
1 ./disql "SYSDBA/密码@LOCALHOST#{UKEY_NAME=加密引擎名,UKEY_PIN=PIN}" 使用 UKEY 完成身份鉴别并连接数据库(连接串中指定引擎名与 UKEY PIN)。
2 设置 INI 参数 CLIENT_UKEY=1 客户端强制使用 UKEY 验证;为 0 时是否使用 UKEY 由客户端驱动决定。

八、密钥维护(DM 安全版)

来源:《DM8 安全管理》第 7 章

序号 指令 一句话说明
1 SP_UPDATE_SVRKEY(); 更新服务器主密钥 SVR_KEY(用于加密数据库主密钥)。
2 SP_UPDATE_DBKEY(); 更新数据库主密钥 DB_KEY(用于加密库内密钥)。

附录:DM8 支持的国密相关算法清单

① OPENSSL 软件库(DM 自带封装,动态库位于 bin/dependencies,libcrypto/libssl 系列):

加密:OPENSSL_SM4_ECB、OPENSSL_SM4_CBC、OPENSSL_SM4_CFB、OPENSSL_SM4_OFB、OPENSSL_SM4_ECB_NOPAD、OPENSSL_SM4_CBC_NOPAD、OPENSSL_SM4_CFB_V1、OPENSSL_SM4_OFB_V1(分组加密,分组 16 字节、密钥 16 字节;CFB_V1/OFB_V1 为新版本,与老版本不兼容);

散列:OPENSSL_SM3(用于完整性校验)。

以上算法可用于通信加密、存储加密、备份加密等场景。

② 渔翁硬件加密卡(需配套加密卡及其动态库 libenc_dll.so / card_enc.dll,置于 bin/external_crypto_libs 目录):

加密:FM_SM1_ECB/CBC、FM_SM4_ECB/CBC、FM_SM6_ECB/CBC 及对应 NOPAD 变体;

散列:FM_SM3、FM_SM2;HMAC:FM_SM3_HMAC。

③ 商密 TLCP 协议:ENABLE_ENCRYPT=6,通信双方需加载 SM2 签名证书与加密证书(server-enc.crt/server-sign.crt 等)。

④ GmSSL:支持 GmSSL 证书(证书放 DM_HOME/bin/server_gmssl 目录,cacert.pem),UKEY 场景亦支持 gmssl 证书目录;会话连接类型(VSESSIONS.PORT_TYPE)为 7 时表示国密 GmSSL 连接。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服