测试中使用的用户有两个,一是SYSDBA,一是TEST,默认建表使用TEST用户创建。
半透明加密
用户密钥
用户密钥:创建用户时可以指定存储加密的密钥,这个密钥就是为了进行半透明加密时使用的。创建用户时指定密钥的方式如下:
一、图形化界面
二、命令
create user "TEST" identified by "123456789" encrypt by "enc_003"; --此时,enc_003为密钥口令
列的半透明加密设置
如果在创建用户时并没有指定存储加密密钥,系统也会自动为用户生成一个默认的加密密钥。如果在创建表或修改表时指定对表列进行半透明加密,DM 会使用用户的存储加密密钥对数据进行加密。
一、图形化界面(使用DM管理工具,右键表名,选择“修改)
二、命令
CREATE TABLE TEST_ENCRYPT7(C1 INT, C2 INT ENCRYPT WITH DES_ECB MANUAL);
测试
一、不加密创建表TEST_ENCRYPT7
CREATE TABLE TEST_ENCRYPT7(C1 INT, C2 INT);
向表中插入数据
insert into TEST.TEST_ENCRYPT7 VALUES (1,2);
insert into TEST.TEST_ENCRYPT7 VALUES (3,4);
commit;
使用test用户和sysdba用户分别查看数据:
select * from TEST.TEST_ENCRYPT7;
查询结果均为
SQL> select * from test.test_encrypt7;
行号 C1 C2
---------- ----------- -----------
1 1 2
2 3 4
二、设置列加密
查看数据:
test查看数据:
SQL> select * from test.test_encrypt7;
行号 C1 C2
---------- ----------- -----------
1 1 2
2 3 4
sysdba查看数据:
SQL> select * from test.test_encrypt7;
行号 C1 C2
---------- ----------- -----------
1 1 NULL
2 3 NULL
三、使用sysdba插入数据
insert into TEST.TEST_ENCRYPT7 VALUES (5,6);
commit;
SQL> select * from test01.test_encrypt7;
行号 C1 C2
---------- ----------- -----------
1 1 NULL
2 3 NULL
3 5 6
使用test查看:
SQL> select * from test_encrypt7;
行号 C1 C2
---------- ----------- -----------
1 1 2
2 3 4
3 5 NULL
可以看出,非透明加密模式只能看到自己插入的数据。
非透明加密
非透明加密通过用户调用存储加密函数来进行,可以参考达梦官方手册《DM8安全管理》。
测试中使用对varchar类型加密的函数CFALGORITHMSENCRYPT,包含三个参数,使用方法例如:CFALGORITHMSENCRYPT(‘test’, 514, ‘测试口令’),其中,“test”为需要加密的varchar字段,“514”为加密算法,“测试口令”为KEY 采用的密钥。
测试
一、创建表
CREATE TABLE test.enc_004(c1 VARCHAR(200));
二、插入数据
INSERT INTO test.enc_004 VALUES(CFALGORITHMSENCRYPT('test', 514, '测试口令'));
commit;
三、 在sysdba和test用户下查询表中的数据:
查询结果均为:
SQL> select * from enc_004;
行号 C1
---------- ----------------------------------
1 B969389614197FC0B39C56B550C0E496FE
四、 在sysdba和test用户下调用解密函数查询:
两个用户下查询结果均为:
SQL> SELECT CFALGORITHMSDECRYPT(c1, 514, '测试口令') FROM enc_004;
行号 CFALGORITHMSDECRYPT(C1,514,'测试口令')
---------- --------------------------------------
1 test