达梦创建用户时可以指定存储加密密钥,这个密钥就是为了进行半 透明加密时使用的。如果在创建用户时并没有指定存储加密密钥,系统也会自动为用户生成 一个默认的加密密钥 , 也可以用户自己指定加密算法。 半透明是表内数据对当前操作的用户是透明的,对其他的用户是非透明的(包括管理员用户)。 如果在创建表或修改表时指定对表列进行半透明加密, DM 会使用用户的存储加密密钥 对数据进行加密。
一、 配置外部的加密算法到达梦
1、 如果没有文件夹,就创建一个加密文件夹
mkdir -p /DM_HOME/bin/external_crypto_libs
2 、拷贝外部算法到文件夹,进行赋权限和重启数据库服务。
cp lib*_crypto . so /DM_HOME/bin/external_crypto_libs
3 、通过 V$EXTERNAL_CIPHERS 查看外部算法是否加入数据成功
Select * from V$EXTERNAL_CIPHERS ;
二、 测试半透明加密
1、 查看数据库支持的加密算法
select id,name from V$EXTERNAL_CIPHERS
union all
select CYT_ID,CYT_NAME from V$CIPHERS;
说明: V$EXTERNAL_CIPHERS ,可查看所有的第三方加密算法。
2、 创建使用用户testuser
create user "TESTUSER" identified by "123456789";
grant "PUBLIC","RESOURCE","SOI","VTI" to "TESTUSER";
3、 TESTUSER 创建需要半透明的表, C1 列做半透明加密
create table test (c1 varchar(16) encrypt with OPENSSL_SM4_ECB manual, c2 int);
4、 分别用 sysdba 和 testuser 用户对这张表插入数据。
使⽤ SYSDBA ⽤户插⼊数据到 test 表
insert into testuser.test (c1,c2) values ('DM_SYSDBA',1);
commit;
使⽤ TESTUSER ⽤户插⼊数据到 test 表
insert into sysdba.test (c1,c2) values ('DM_TES T USER', 2 );
commit;
5、 用 sysdba 用户查询这张表
select * from TESTUSER .test;

6、 用 TESTUSER 用户查询这张表
select * from test;

小结:半透明加密适用于不同的用户对同一张表做操作,还要做到用户数据隔离的场景。列加密模式具备⽤户隔离,即谁写⼊,谁解密,其他⽤户⽆法查看。