暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

南大通用GBase 8s数据加密函数

晚安的星星云 2021-12-23
1259

一、 数据加密函数

你可以将 SET ENCRYPTION PASSWORD 语句与内置 SQL 加密函数(使用 Advanced 

Encryption Standard (AES)和 Triple DES (3DES)加密)一起使用来保护你的敏感数据。 

如果使用加密,只有拥有正确密码的用户才能读取、复制或修改数据。 

将SET ENCRYPTION PASSWORD 语句与下列内置加密和解密函数一起使用 : 

• ENCRYPT\_AES 

ENCRYPT\_AES(data-string-expression 

\[, password-string-expression \[, hint-string-expression \]\]) 

• ENCRYPT\_TDES

ENCRYPT\_TDES (data-string-expression 

\[, password-string-expression \[, hint-string-expression \]\]) 

• DECRYPT\_CHAR 

DECRYPT\_CHAR(EncryptedData \[, PasswordOrPhrase\]) 

• DECRYPT\_BINARY 

DECRYPT\_BINARY(EncryptedData \[, PasswordOrPhrase\]) 

• GETHINT 

GETHINT(EncryptedData) 

如果你使用了 SET ENCRYPTION PASSWORD 语句来指定缺省密码,那么数据库服务器 

将该密码应用于同一会话中调用的对加密和解密函数的后续调用中。 

使用 ENCRYPT\_AES 和 ENCRYPT\_TDES 定义加密的数据,使用 DECRYPT\_CHAR 和 DECRYPT\_BINARY 查询加密的数据。使用 GETHINT 显示密码提示符(如果在服务器上设置了该字符串)。 

可以使用这些 SQL 内置函数来实现列级别或单元级别加密。 

使用列级别加密,用相同的密码为给定列上的所有值加密。 

使用单元级别加密,用不同的密码为列内的数据加密。 

提示: 如果想从大型表中选择加密数据,请指定未加密的列。在其中选择行,可对包含加密数 

据的列创建索引或外键约束,但是这样做对资源使用的效率较低,原因是查询优化器不使用此 

类索引和外键约束。 

1、 使用列级别数据加密来保护信用卡数据 

下列示例使用列级别加密来保护信用卡数据。 

使用列级别加密来保护信用卡数据: 

1. 创建表:create table customer (id char(30), creditcard lvarchar(67)); 

2. 插入加密数据: 

a. 设置会话密码:SET ENCRYPTION PASSWORD "credit card number is encrypted"; 

b. 加密数据。 

INSERT INTO customer VALUES 

("Alice", encrypt\_aes("1234567890123456")); 

INSERT INTO customer VALUES 

("Bob", encrypt\_aes("2345678901234567")); 

3. 使用解密函数查询加密数据。

SET ENCRYPTION PASSWORD "credit card number is encrypted"; 

SELECT id FROM customer 

WHERE DECRYPT\_CHAR(creditcard) = "2345678901234567"; 

重要: 加密数据值比相应的未加密数据占用更多的存储空间。列宽足够存储明文的列可能需要 

增大宽度才能支持列级别加密或单元级别加密。如果要将加密值插入声明宽度小于加密字符串 

的列,那么列存储截断后的值,该值无法被解密。

 

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论