—
–下面是一个例子:
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中的代码安全(四):主密钥










