测试使用SQL Servre 2012 R2,创建如下的数据表:
--创建测试用的用户表
CREATE TABLE TBLUser
(
Name nvarchar(30),
Password varbinary(1000),
)
GO
创建数据库主密钥
数据库主密钥(Database Master Key)在服务主密钥之下,由服务主密钥进行加密。这是一个数据库级别的密钥,可以用于为创建数据库级别的证书或非对称密钥提供加密。每一个数据库只能有一个数据库主密钥,通过T-SQL语句创建。具体代码如下:
--创建数据库主密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='passW@ord'
GO
创建证书
创建一个用来加密对称秘钥证书,具体代码如下:
--创建证书
CREATE CERTIFICATE TestCert with SUBJECT = 'Test Certificate'
GO
创建一个对称秘钥
由SQL Server加密层次结构可以看出,对称密钥可以通过密码创建,也可以通过其它对称密钥、非对称密钥和证书创建。本文以证书创建一个测试用的对称秘钥,具体代码如下:
--创建对称密钥
CREATE SYMMETRIC KEY TestSymmetric WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE TestCert
GO
加密数据
先打开证对称秘钥,再使用ENCRYPTBYKEY函数加密数据,完成后关闭对称秘钥。具体代码如下:
--使用对称秘钥加密数据
OPEN SYMMETRIC KEY TestSymmetric DECRYPTION BY CERTIFICATE TestCert;
INSERT INTO TBLUser values('张三', ENCRYPTBYKEY(Key_Guid(N'TestSymmetric'), '123456'));
CLOSE SYMMETRIC KEY TestSymmetric;
GO
查看加密后的数据
直接下SQL查询加密后的数据,可以看到password的内容是一串不可以阅读的16进制的字符。
--查看加密后的数据
SELECT * FROM TBLUser
GO
解密数据
先打开证对称秘钥,再使用DecryptByKey函数解密数据,完成后关闭对称秘钥。具体代码如下:
--解密数据
OPEN SYMMETRIC KEY TestSymmetric DECRYPTION BY CERTIFICATE TestCert;
SELECT Name, CAST(DecryptByKey(password) as varchar(100)) Password FROM TBLUser;
CLOSE SYMMETRIC KEY TestSymmetric;
GO
最后修改时间:2022-07-07 08:59:55
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




