SQLSERVER加密解密函数(非对称密钥 证书加密 对称密钥)使用方法代

2020-07-10 08:06:12易采站长站整理


–下面是一个例子:
USE [pratice]
GO
–DROP TABLE [dbo].[PWDQuestion]
–GO
–创建测试数据表,用于对称加密
CREATE TABLE dbo.PWDQuestion
(
  CustomerID INT NOT NULL PRIMARY KEY ,
  PasswordHintQuestion NVARCHAR(300) NOT NULL ,
  PasswordHintAnswer VARBINARY(200) NOT NULL
)
GO
–插入加密数据
OPEN SYMMETRIC KEY sym_Demo
DECRYPTION BY PASSWORD =’newnew!456′
INSERT  dbo.PWDQuestion ( CustomerID, PasswordHintQuestion, PasswordHintAnswer )
VALUES  ( 12, ‘您出生的医院名称?’, ENCRYPTBYKEY(KEY_GUID(‘sym_Demo ‘), ‘杭州市一’) )
CLOSE SYMMETRIC KEY sym_Demo


–查看未加密的数据:
–解密数据
OPEN SYMMETRIC KEY sym_Demo
DECRYPTION BY PASSWORD =’newnew!456′
SELECT  CustomerID, PasswordHintQuestion,
        CAST(DECRYPTBYKEY(PasswordHintAnswer) AS VARCHAR(200)) PasswordHintAnswer
FROM    dbo.PWDQuestion
WHERE   CustomerID = 12
–打开后切记关闭!!!
CLOSE SYMMETRIC KEY sym_Demo


–不打开直接读取
SELECT  CustomerID, PasswordHintQuestion,
        CAST(DECRYPTBYKEY(PasswordHintAnswer) AS VARCHAR(200)) PasswordHintAnswer
FROM    dbo.PWDQuestion
WHERE   CustomerID = 12



–至此,好像已经大功告成了,别,千万别高兴得太早!


–这里有个问题,如果恶意用户不知道CustomerID=13的PasswordHintAnswer列的真实值,
–但知道CustomerID=14的PasswordHintAnswer列的真实值,
–则完全可以通过恶意替换PasswordHintAnswer列而绕过加密!!
–此时,我们索性连CustomerID列作为验证列也一起加密,以绝后患 !

–注意:加密的验证列也可以由另一个相关表的列作为参数传入。


–示例五、删除对称密钥


–命令:DROP SYMMETRIC KEY 删除指定的对称密钥( http://technet.microsoft.com/en-us/library/ms182698.aspx)

–例子:


DROP SYMMETRIC KEY sym_Demo
–注意:如果加密密钥打开没有关闭,则drop失败。


–小结:

–1、本文主要介绍对称密钥的创建、删除、查看以及用它来修改加密方式、进行数据的加密和解密。

–2、对称密钥的特性是:在数据库会话中使用它对数据进行加密和解密前必须首先打开。

–3、对称密钥可用于大数据的加密。
——————————————————————————————-
–SQL Server 2008中的代码安全(四):主密钥

相关文章 大家在看