存储加密

为了防止用户直接通过数据文件获取用户信息,DM提供了全面的数据加密的功能,包括:

  • 透明加密
  • 半透明加密
  • 非透明加密

存储加密在保证数据文件安全性的同时,也会带来一定的性能影响,不同的加密算法对性能的影响各有不同,用户需要根据自己的需求来决定是否进行加密以及加密算法的选择。

7.1 透明加密

在透明加密中,密钥生成、密钥管理和加解密过程由数据库管理系统自动完成,用户不可见。透明加密的目的主要是保证存储在数据文件中的敏感数据的安全,并不能保护合法用户的个人私密数据。系统内置了常用的DES,AES,RC4等类型的加密算法,以此来保护数据的安全性。

DM支持的加密算法可通过查询动态视图V$CIPHERS得到,表7.1列出了DM具体支持的加密和散列算法。

表7.1 DM支持的加密和散列算法
算法名称 算法类型 分组长度 密钥长度
DES_ECB 分组加密算法 8 8
DES_CBC 分组加密算法 8 8
DES_CFB 分组加密算法 8 8
DES_OFB 分组加密算法 8 8
DESEDE_ECB 分组加密算法 8 16
DESEDE_CBC 分组加密算法 8 16
DESEDE_CFB 分组加密算法 8 16
DESEDE_OFB 分组加密算法 8 16
AES128_ECB 分组加密算法 16 16
AES128_CBC 分组加密算法 16 16
AES128_CFB 分组加密算法 16 16
AES128_OFB 分组加密算法 16 16
AES192_ECB 分组加密算法 16 24
AES192_CBC 分组加密算法 16 24
AES192_CFB 分组加密算法 16 24
AES192_OFB 分组加密算法 16 24
AES256_ECB 分组加密算法 16 32
AES256_CBC 分组加密算法 16 32
AES256_CFB 分组加密算法 16 32
AES256_OFB 分组加密算法 16 32
DES_ECB_NOPAD 分组加密算法 8 8
DES_CBC_NOPAD 分组加密算法 8 8
DESEDE_ECB_NOPAD 分组加密算法 8 16
DESEDE_CBC_NOPAD 分组加密算法 8 16
AES128_ECB_NOPAD 分组加密算法 16 16
AES128_CBC_NOPAD 分组加密算法 16 16
AES192_ECB_NOPAD 分组加密算法 16 24
AES192_CBC_NOPAD 分组加密算法 16 24
AES256_ECB_NOPAD 分组加密算法 16 32
AES256_CBC_NOPAD 分组加密算法 16 32
RC4 流加密算法 - 16
MD5 散列算法 - -
SHA1 散列算法 - -
建议

以“NOPAD”结尾的加密算法需要用户保证原始数据长度是分组长度的整数倍,DM不会自动填充。如果数据不一定是分组长度的整数倍,请选择不以“NOPAD”结尾的加密算法,以“NOPAD”结尾的加密算法主要用于数据页分片加密。 DM安装中自带OPENSSL的动态库,则查询V$CIPHERS时除了上表中列出的算法,还会查询到OPENSSL动态库的相关算法。

7.1.1 全库加密

对DM数据库进行全库加密需要在初始化数据库时通过ENCRYPT_NAME参数指定全库加密算法,加密密钥由DM自动生成。若初始化数据库时不指定ENCRYPT_NAME参数,则不进行全库加密。

指定的全库加密算法可以是DM内部支持的加密算法(可通过查询动态视图V$CIPHERS得到,也可见表7.1),也可以是第三方加密算法。

指定全库加密时,在DM数据库服务器启动及运行的过程中,需要对处理的所有数据页通过指定的加密算法和DM自动生成的密钥进行加解密处理。如果数据页读入缓存,需要进行解密后才能使用,在缓存中的数据页进行刷盘时,需要对数据页进行加密后存储到数据文件中。

7.1.2 表空间透明加密

DM支持在创建表空间时指定进行透明加密,语法格式为:

CREATE TABLESPACE <表空间名><数据文件子句> [<数据页缓冲池子句>] [<存储加密子句>]
<存储加密子句> ::= ENCRYPT WITH <加密算法> [BY <加密密码>]
建议

此处主要说明存储加密相关的语法,其余语法的详细描述请参考《DM8_SQL语言使用手册》,后续小节中相同,不再说明。

使用说明:

  1. 支持的加密算法可通过查询动态视图V$CIPHERS得到,也可见表7.1;
  2. 加密密码最大长度32字节,若未指定,由DM随机生成;
  3. 如果已指定全库加密,则不再支持表空间加密。

7.1.3 表列透明加密

DM支持对表的列进行透明加密,支持建表时设置加密列,以及修改表定义时设置加密列。存储加密支持所有的列类型,包括大字段类型。用透明加密的方式加密列上的数据时,在数据库中保存加密该列的密钥,执行DML语句的过程中系统能自动获取密钥。

建表或修改表时指定对列进行透明加密的语法格式为:

……
<列定义> ::= <不同类型列定义> [<列定义子句>]
[<STORAGE子句>] [<透明存储加密子句>]
<透明存储加密子句> ::= <透明存储加密子句1>|<透明存储加密子句2>
<透明存储加密子句1>::= ENCRYPT [<透明加密用法>]
<透明存储加密子句2> ::= ENCRYPT <透明加密用法><散列选项>
<透明加密用法> ::= WITH <加密算法> |
                WITH <加密算法> AUTO |
                AUTO
<加密密码1> ::= BY <口令>
<加密密码2> ::= BY WRAPPED ‘<口令密文>’
<散列选项> ::= HASH WITH<散列算法> [<加盐选项>]
<加盐选项> ::= [NO] SALT
建议

此语法格式不完整,主要说明与表列透明加密相关的部分,其他建表相关语法请参考《DM8_SQL语言使用手册》。

使用说明:

  1. 支持的加密算法可通过查询动态视图V$CIPHERS得到,也可见表7.1;
  2. 当使用列加密但没有指定加密算法时,缺省使用AES256_CBC加密算法;
  3. 散列算法支持MD5和SHA1,用于保证用户数据的完整性,若用户数据被非法修改,则能判断该数据不合法;

例如,以下是一些对表列进行透明加密的例子。

CREATE TABLE TEST_ENCRYPT1(C1 INT, C2 INT ENCRYPT);
CREATE TABLE TEST_ENCRYPT2(C1 INT, C2 INT ENCRYPT WITH DES_ECB);
CREATE TABLE TEST_ENCRYPT5(C1 INT, C2 INT ENCRYPT WITH DES_ECB HASH WITH MD5 SALT);

7.1.4 其他数据库对象加密

DM还支持对存储过程、存储函数、触发器、包、类、自定义类型等的定义进行加密,创建时在对象名称后加上“WITH ENCRYPTION ”即可。

例如,创建存储过程proc_arg,对其定义进行加密。

CREATE OR REPLACE PROCEDURE proc_arg WITH ENCRYPTION(a IN INT, b INT)
AS
BEGIN
    a:=0;
    b:=A+1;
END;

7.2 半透明加密

在2.2节中可以看到,创建用户时可以指定存储加密密钥,这个密钥就是为了进行半透明加密时使用的。如果在创建用户时并没有指定存储加密密钥,系统也会自动为用户生成一个默认的加密密钥。

如果在创建表或修改表时指定对表列进行半透明加密,DM会使用用户的存储加密密钥对数据进行加密。半透明加密列的密文后追加了4个字节的UID,用户查询数据时,若当前会话用户ID与列密文数据中存储的UID相同,则返回明文,否则返回NULL。

建表或修改表时指定对列进半透明加密的语法格式为:

……

<列定义> ::= <不同类型列定义> [<列定义子句>]
[<STORAGE子句>] [<半透明存储加密子句>]
<半透明存储加密子句> ::= ENCRYPT [WITH <加密算法>] MANUAL[<散列选项>]
<散列选项> ::= HASH WITH <散列算法> [<加盐选项>]
<加盐选项> ::= [NO] SALT
建议

使用半透明加密时,用户仅能查看到自己插入的数据。

使用说明:

  1. HUGE表不支持半透明加密列;
  2. 半透明加密列不能作为索引列,索引列也不能修改为半透明加密列;
  3. 半透明加密列不允许添加引用约束;
  4. 若表中包含半透明加密列,则不允许创建聚集索引,同时不允许删除该表原有的聚集索引;
  5. 不允许修改半透明加密列的列定义;
  6. 当增加列、删除列或者修改列定义时,若表中包含半透明加密列,则INI参数ALTER_TABLE_OPT不能设置为1,若参数ALTER_TABLE_OPT为1,则系统自动按照参数ALTER_TABLE_OPT为0时处理,关于参数ALTER_TABLE_OPT的详细介绍请参考手册《DM8系统管理员手册》;
  7. 当增加列且新增列的默认值非NULL时,若新增列为半透明加密列,则INI参数ALTER_TABLE_OPT不能设置为3,若参数ALTER_TABLE_OPT为3,则系统自动按照参数ALTER_TABLE_OPT为0时处理;
  8. 若表中包含半透明加密列,则不允许使用REBUILD COLUMNS子句修改表,关于REBUILD COLUMNS子句的详细介绍请参考手册《DM8_SQL语言使用手册》;
  9. 物化视图的查询语句中不能涉及半透明加密列;
  10. 若表指定了USING LONG ROW存储选项,即支持超长记录存储时,如果表中包含半透明加密列,并且该列的数据类型为字符串类型,则系统将默认该列不支持超长记录存储;
  11. 半透明列不支持带默认值的快速加列;
  12. 半透明加密列支持UPDATE,具体规则如下:

1)用户通过UPDATE语句修改半透明加密列数据,执行提交或回滚操作前:当前用户可查询更新后表中UID与自身用户ID相匹配的半透明加密列数据,其他用户可查询更新前表中UID与自身用户ID相匹配的半透明加密列数据;

2)用户通过UPDATE语句修改半透明加密列数据,执行回滚操作后:表中数据恢复到执行UPDATE操作前的状态,当前用户和其他用户均可查询更新前表中UID与自身用户ID相匹配的半透明加密列数据;

3)用户通过UPDATE语句修改半透明加密列数据,执行提交操作后:当前用户和其他用户均可查询更新后表中UID与自身用户ID相匹配的半透明加密列数据。

例1,以下是一些对表列进行半透明加密的例子。

CREATE TABLE TEST_ENCRYPT6(C1 INT, C2 INT ENCRYPT MANUAL);
CREATE TABLE TEST_ENCRYPT7(C1 INT, C2 INT ENCRYPT WITH DES_ECB MANUAL);
CREATE TABLE TEST_ENCRYPT8(C1 INT, C2 INT ENCRYPT WITH DES_ECB MANUAL HASH WITH MD5 SALT);
CREATE TABLE TEST_ENCRYPT9(C1 INT, C2 INT ENCRYPT MANUAL HASH WITH MD5 SALT);

例2,以下是对半透明加密列进行更新操作的示例。

创建用户USER1和USER2。

CREATE USER USER1 IDENTIFIED BY 123456789;

CREATE USER USER2 IDENTIFIED BY 123456789;

GRANT DBA TO USER1;

GRANT DBA TO USER2;

COMMIT;

用户USER1创建包含半透明加密列的表TEST并插入数据,执行提交操作后,用户USER1和USER2对表中数据进行查询。

CONN USER1/123456789@LOCALHOST

CREATE TABLE TEST(C1 VARCHAR ENCRYPT MANUAL);

INSERT INTO TEST VALUES('AAA');

COMMIT;

SELECT * FROM USER1.TEST;

行号   C1 

---------- ---

1     AAA

 

CONN USER2/123456789@LOCALHOST

SELECT * FROM USER1.TEST;

行号   C1 

---------- ----

1     NULL

用户USER2对表TEST中的半透明加密列进行更新,执行提交操作后,用户USER1和USER2对表中数据进行查询。

CONN USER2/123456789@LOCALHOST

UPDATE USER1.TEST SET C1 = 'BBB';

COMMIT;

SELECT * FROM USER1.TEST;

行号   C1 

---------- ---

1     BBB

 

CONN USER1/123456789@LOCALHOST

SELECT * FROM USER1.TEST;

行号   C1 

---------- ----

1     NULL

用户USER1对表TEST中的半透明加密列进行更新,执行回滚操作后,用户USER1和USER2对表中数据进行查询。

CONN USER1/123456789@LOCALHOST

UPDATE USER1.TEST SET C1 = 'CCC';

ROLLBACK;

SELECT * FROM USER1.TEST;

行号   C1 

---------- ----

1     NULL

 

CONN USER2/123456789@LOCALHOST

SELECT * FROM USER1.TEST;

行号   C1 

---------- ---

1     BBB

7.3 非透明加密

DM对非透明加密的支持是通过对用户提供加解密接口实现的。用户在使用非透明加密时,需要提供密钥并调用加解密接口。采用非透明加密可以保证个人私密数据不被包括DBA在内的其他人获取。

非透明加密通过用户调用存储加密函数来进行,DM提供了一系列的存储加密函数,还提供了一个数据加密包DBMS_OBFUSCATION_TOOLKIT。本节主要介绍DM的存储加密函数,关于包DBMS_OBFUSCATION_TOOLKIT的介绍请参看《DM8系统包使用手册》的相关章节。

DM提供了下列存储加密函数:

  1. CFALGORITHMSENCRYPT
CFALGORITHMSENCRYPT(
    SRC VARCHAR,
    ALGORITHM INT,
    KEY VARCHAR
)

参数说明:

SRC 需要被加密的VARCHAR类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

功能说明:

对VARCHAR类型的明文进行加密,并返回密文。

返回值:

加密后的密文,数据类型为VARCHAR

举例说明:

对数据进行加密:

CREATE TABLE enc_001(c1 VARCHAR(200));
INSERT INTO enc_001 VALUES(CFALGORITHMSENCRYPT('tt', 514, '仅供测试使用'));

这样就将加密后的数据存放到表列中。

  1. CFALGORITHMSDECRYPT
CFALGORITHMSDECRYPT(
    SRC VARCHAR,
    ALGORITHM INT,
    KEY VARCHAR
)

参数说明:

SRC 需要被解密的VARCHAR类型密文

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

功能说明:

对密文进行解密,并得到加密前的VARCHAR类型明文。

返回值:

解密后的明文,数据类型为VARCHAR

举例说明:

对数据进行解密:

SELECT CFALGORITHMSDECRYPT(c1, 514, '仅供测试使用') FROM enc_001;
行号 			CFALGORITHMSDECRYPT(C1,514,'仅供测试使用')
---------- ------------------------------------------
1 			tt
  1. SF_ENCRYPT_BINARY
SF_ENCRYPT_BINARY(
    SRC VARBINARY,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被加密的VARBINARY类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对VARBINARY类型明文进行加密,并返回密文。

返回值:

加密后的密文,数据类型为VARBINARY

举例说明:

对数据进行加密:

CREATE TABLE enc_002(c1 VARBINARY(200));
INSERT INTO enc_002 VALUES(SF_ENCRYPT_BINARY(0x12345678EF, 514, '仅供测试使用', NULL));

这样就将加密后的数据存放到表列中。

  1. SF_DECRYPT_TO_BINARY
SF_DECRYPT_TO_BINARY(
    SRC VARBINARY,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被解密的VARBINARY类型密文

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对密文进行解密,并得到加密前的VARBINARY类型明文。

返回值:

解密后的明文,数据类型为VARBINARY

举例说明:

对数据进行解密:

SELECT SF_DECRYPT_TO_BINARY(c1, 514, '仅供测试使用',NULL) FROM enc_002;
行号 			SF_DECRYPT_TO_BINARY(C1,514,'仅供测试使用',NULL)
---------- ------------------------------------------------
1 			0x12345678EF
  1. SF_ENCRYPT_CHAR
SF_ENCRYPT_CHAR(
    SRC VARCHAR,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被加密的CHAR/VARCHAR类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对VARCHAR类型明文进行加密,并返回密文。

返回值:

加密后的密文,数据类型为VARBINARY

举例说明:

对数据进行加密:

CREATE TABLE enc_003(c1 VARBINARY(200));
INSERT INTO enc_003 VALUES(SF_ENCRYPT_CHAR('测试数据', 514, '仅供测试使用',NULL));

这样就将加密后的数据存放到表列中。

  1. SF_DECRYPT_TO_CHAR
SF_DECRYPT_TO_CHAR(
    SRC VARBINARY,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被解密的VARBINARY类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对密文进行解密,并得到加密前的VARCHAR类型明文。

返回值:

解密后的明文,数据类型为VARCHAR

举例说明:

对数据进行解密:

SELECT SF_DECRYPT_TO_CHAR(c1, 514, '仅供测试使用',NULL) FROM enc_003;
行号 			SF_DECRYPT_TO_CHAR(C1,514,'仅供测试使用',NULL)
---------- ----------------------------------------------
1 			测试数据
  1. SF_ENCRYPT_DATE
SF_ENCRYPT_DATE(
    SRC DATE,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被加密的DATE类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对DATE类型明文进行加密,并返回密文。

返回值:

加密后的密文,数据类型为VARBINARY

举例说明:

对数据进行加密:

CREATE TABLE enc_004(c1 VARBINARY(200));
INSERT INTO enc_004 VALUES(SF_ENCRYPT_DATE(cast('2011-1-1' as date), 514, '仅供测试使用',NULL));

这样就将加密后的日期类型数据存放到表列中。

  1. SF_DECRYPT_TO_DATE
SF_DECRYPT_TO_DATE(
    SRC VARBINARY,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被解密的VARBINARY类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对密文进行解密,并得到加密前的DATE类型明文。

返回值:

解密后的明文,数据类型为DATE

举例说明:

对数据进行解密:

SELECT SF_DECRYPT_TO_DATE(c1, 514, '仅供测试使用',NULL) FROM enc_004;
行号 			SF_DECRYPT_TO_DATE(C1,514,'仅供测试使用',NULL)
---------- ----------------------------------------------
1 			2011-01-01
  1. SF_ENCRYPT_DATETIME
SF_ENCRYPT_DATETIME(
    SRC DATETIME,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被加密的DATETIME类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对DATETIME类型明文进行加密,并返回密文。

返回值:

加密后的密文,数据类型为VARBINARY

举例说明:

对数据进行加密:

CREATE TABLE enc_005(c1 VARBINARY(200));
INSERT INTO enc_005 VALUES(SF_ENCRYPT_DATETIME(cast('2011-12-12 11:11:11' as datetime), 514, '仅供测试使用',NULL));

这样就将加密后的日期时间类型数据存放到表列中。

  1. SF_DECRYPT_TO_DATETIME
SF_DECRYPT_TO_DATETIME(
    SRC VARBINARY,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被加密的DATETIME类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对密文进行解密,并得到加密前的DATETIME类型明文。

返回值:

解密后的明文,数据类型为DATETIME

举例说明:

对数据进行解密:

SELECT SF_DECRYPT_TO_DATETIME (c1, 514, '仅供测试使用',NULL) FROM enc_005;
行号 			SF_DECRYPT_TO_DATETIME(C1,514,'仅供测试使用',NULL)
---------- --------------------------------------------------
1 			2011-12-12 11:11:11.0
  1. SF_ENCRYPT_DEC
SF_ENCRYPT_DEC(
    SRC DEC,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被加密的DEC类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对DEC类型明文进行加密,并返回密文。

返回值:

加密后的密文,数据类型为VARBINARY

举例说明:

对数据进行加密:

CREATE TABLE enc_006(c1 VARBINARY(200));
INSERT INTO enc_006 VALUES(SF_ENCRYPT_DEC(cast('3.1415900000'as dec(15,10)), 514, '仅供测试使用',NULL));

这样就将加密后的DEC数据存放到表列中。

  1. SF_DECRYPT_TO_DEC
SF_DECRYPT_TO_DEC(
    SRC VARBINARY,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被解密的VARBINARY类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对密文进行解密,并得到加密前的DEC类型明文。

返回值:

解密后的明文,数据类型为DEC

举例说明:

对数据进行解密:

SELECT SF_DECRYPT_TO_DEC(c1, 514, '仅供测试使用',NULL) FROM enc_006;
行号 			SF_DECRYPT_TO_DEC(C1,514,'仅供测试使用',NULL)
---------- ---------------------------------------------
1 			3.141590000000
  1. SF_ENCRYPT_TIME
SF_ENCRYPT_TIME(
    SRC TIME,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCAHR
)

参数说明:

SRC 需要被加密的TIME类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对TIME类型明文进行加密,并返回密文。

返回值:

加密后的密文,数据类型为VARBINARY

举例说明:

对数据进行加密:

CREATE TABLE enc_007(c1 VARBINARY(200));
INSERT INTO enc_007 VALUES(SF_ENCRYPT_TIME(cast('12:12:12' as time), 514, '仅供测试使用',NULL));

这样就将加密后的时间类型数据存放到表列中。

  1. SF_DECRYPT_TO_TIME
SF_DECRYPT_TO_TIME(
    SRC VARBINARY,
    ALGORITHM INT,
    KEY VARCHAR,
    IV VARCHAR
)

参数说明:

SRC 需要被解密的VARBINARY类型数据

ALGORITHM 加密算法ID,不可以为NULL。加密算法对应的ID可通过查询V$CIPHERS得到

KEY 采用的密钥,不可以为NULL

IV 采用的初始化矢量,可以为NULL

功能说明:

对密文进行解密,并得到加密前的TIME类型明文。

返回值:

解密后的明文,数据类型为TIME

举例说明:

对数据进行解密:

SELECT SF_DECRYPT_TO_TIME(c1, 514, '仅供测试使用',NULL) FROM enc_007;
行号 			SF_DECRYPT_TO_TIME(C1,514,'仅供测试使用',NULL)
---------- ----------------------------------------------
1 			12:12:12.0
  1. SF_GET_CIPHER_NAME
SF_GET_CIPHER_NAME(
	CIPHER_ID IN INT
)

参数说明:

CIPHER_ID 加密算法ID

功能说明:

根据加密算法ID,获取加密算法的名称

返回值:

加密算法的名称,最大长度32767

举例说明:

CREATE TABLE T1(C1 INT ENCRYPT ,C2 INT ENCRYPT );
SELECT ID FROM SYSOBJECTS WHERE NAME = 'T1';
--设返回1152
SELECT * FROM SYS.SYSCOLCYT WHERE TID = 1152;
--SYSCOLCYT表中ENC_ID列对应的值,即为列的加密类型ID,此处返回2050
SELECT SF_GET_CIPHER_NAME(2050);

行号 			SF_GET_CIPHER_NAME(2050)
---------- ------------------------
1 			AES256_CBC
微信扫码
分享文档
扫一扫
联系客服