加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer 数据加密

发布时间:2020-12-12 13:40:29 所属栏目:MsSql教程 来源:网络整理
导读:--示例一,使用证书加密数据. --建立测试数据表 CREATE TABLE tb(ID int IDENTITY(1,1),data varbinary(8000)); GO --建立证书一,该证书使用数据库主密钥来加密 CREATE CERTIFICATE Cert_Demo1 ? WITH ? ?SUBJECT=N'cert1 encryption by database master key'


--示例一,使用证书加密数据.

--建立测试数据表

CREATE TABLE tb(ID int IDENTITY(1,1),data varbinary(8000));

GO


--建立证书一,该证书使用数据库主密钥来加密


CREATE CERTIFICATE Cert_Demo1 ?


WITH ?


?SUBJECT=N'cert1 encryption by database master key',


?START_DATE='2008-01-01',


?EXPIRY_DATE='2008-12-31'


GO

--建立证书二,该证书使用密码来加密


CREATE CERTIFICATE Cert_Demo2

?ENCRYPTION BY PASSWORD='liangCK.123'

WITH ?

?SUBJECT=N'cert1 encrption by password',

?START_DATE='2008-01-01',

?EXPIRY_DATE='2008-12-31'

GO


--此时,两个证书已经建立完,现在可以用这两个证书来对数据加密

--在对表tb做INSERT时,使用ENCRYPTBYCERT加密


INSERT tb(data)

SELECT ENCRYPTBYCERT(CERT_ID(N'Cert_Demo1'),N'这是证书1加密的内容-liangCK'); ?--使用证书1加密


INSERT tb(data)

SELECT ENCRYPTBYCERT(CERT_ID(N'Cert_Demo2'),N'这是证书2加密的内容-liangCK'); ?--使用证书2加密


--ok.现在已经对数据加密保证了.现在我们SELECT看看

SELECT * FROM tb ;


--现在对内容进行解密显示.


--解密时,使用DECRYPTBYCERT


SELECT 证书1解密=CONVERT(NVARCHAR(50),DECRYPTBYCERT(CERT_ID(N'Cert_Demo1'),data)),


? ? ? --使用证书2解密时,要指定DECRYPTBYCERT的第三个参数,


? ? ? --因为在创建时,指定了ENCRYPTION BY PASSWORD.


? ? ? --所以这里要通过这个密码来解密.否则解密失败


? ? ? 证书2解密


=CONVERT(NVARCHAR(50),DECRYPTBYCERT(CERT_ID(N'Cert_Demo2'),data,N'liangCK.123'))


FROM tb ;


--我们可以看到,因为第2条记录是证书2加密的.所以使用证书1将无法解密.所以返回NULL


/*

证书1解密 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?证书2解密


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


这是证书1加密的内容-liangCK ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? NULL


NULL ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 这是证书2加密的内容-liangCK


(2 行受影响)


*/



GO




--删除测试证书与数据表


DROP CERTIFICATE Cert_Demo1;


DROP CERTIFICATE Cert_Demo2;


DROP TABLE tb;

GO


--示例二,使用对称密钥加密数据,


--对称密钥又使用证书来加密.


--创建测试数据表tb


CREATE TABLE tb(ID int IDENTITY(1,data varbinary(8000));

GO



--建立证书,该证书用于加密对称密钥.


CREATE CERTIFICATE Cert_Demo


?ENCRYPTION BY PASSWORD=N'liangCK.123'

WITH

?SUBJECT=N'cert encryption by password',

?EXPIRY_DATE='2008-12-31'

GO


--建立对称密钥

CREATE SYMMETRIC KEY Sym_Demo

WITH

? ALGORITHM=DES ?--使用DES加密算法

ENCRYPTION BY CERTIFICATE Cert_Demo --使用Cert_Demo证书加密

GO ?


--要使用Sym_Demo对称密钥.必需使用OPEN SYMMETRIC KEY来打开它




OPEN SYMMETRIC KEY Sym_Demo


? DECRYPTION BY CERTIFICATE Cert_Demo


? ? ?WITH PASSWORD=N'liangCK.123'


--插入加密数据


INSERT tb(data)


?SELECT ENCRYPTBYKEY(KEY_GUID(N'Sym_Demo'),N'这是加密的数据,能显示出来吗?')


--关闭密钥


CLOSE SYMMETRIC KEY Sym_Demo


--插入完加密数据,现在使用SELECT来查询一下数据


SELECT * FROM tb ?

GO


--现在来解密此数据

--同样,还是要先打开对称密钥


OPEN SYMMETRIC KEY Sym_Demo

? DECRYPTION BY CERTIFICATE Cert_Demo

? ? ?WITH PASSWORD=N'liangCK.123'

SELECT CONVERT(NVARCHAR(50),DECRYPTBYKEY(data)) --这里可见,数据已经解密出来了.


FROM tb ?

CLOSE SYMMETRIC KEY Sym_Demo

GO



--删除测试


DROP SYMMETRIC KEY Sym_Demo


DROP CERTIFICATE Cert_Demo


DROP TABLE tb


--示例三,还有一种方法加密数据更简单


--就是使用EncryptByPassPhrase

--建立测试数据表tb


CREATE TABLE tb(ID int IDENTITY(1,data varbinary(8000));

GO


INSERT tb(data)

?SELECT EncryptByPassPhrase(N'这是密码,用来加密的',N'这是要加密的内容');


--解密


SELECT CONVERT(NVARCHAR(50),DECRYPTBYPASSPHRASE(N'这是密码,data))

FROM tb ?

GO


DROP TABLE tb

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读