您的位置:首页 > 数据库

SQL Server 2005 加密(安全性:非对称密钥、证书、对称密钥)

2013-11-06 14:38 344 查看
SQL Server2005,引入了列级加密。使得加密可以对特定列执行,这个过程涉及4对加密和解密的内置函数。

EncryptByCert()  和  DecryptByCert()                                —利用证书对数据进行加密和解密
EncryptByAsymKey()  和  DecryptByAsymKey()                —利用非对称密钥对数据进行加密和解密

EncryptByKey()  和   DecryptByKey()                                —利用对称密钥对数据进行加密和解密
EncryptByPassphrase()  和  DecryptByPassphrase()        —利用密码字段产生对称密钥对数据进行加密和解密

通常来说,加密可以分为两大类,对称(Symmetric)加密非对称(Asymmetric)加密

创建密钥:

/*数据库主密钥;这是一个数据库级别的密钥。可以用于为创建数据库级别的证书或非对称密钥提供加密。每一个数据库只能有一个数据库主密钥*/
CREATE MASTER KEY ENCRYPTION BY PASSWORD ='password'
GO
CREATE CERTIFICATE CertTest
with SUBJECT = 'Test Certificate'
GO
--创建非对称密钥
CREATE ASYMMETRIC KEY TestAsymmetric
WITH ALGORITHM = RSA_2048
ENCRYPTION BY PASSWORD = 'password';
GO
--创建对称密钥
CREATE SYMMETRIC KEY TestSymmetric
WITH ALGORITHM = AES_256
ENCRYPTION BY PASSWORD = 'password';
GO




举个例子:

--由证书加密对称密钥
CREATE SYMMETRIC KEY SymmetricByCert
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE CertTest;

--测试数据
CREATE TABLE t_A
(ID int,name VARCHAR(200),pwd VARCHAR(200))
INSERT INTO t_A
SELECT 1,'aa','asd123'
UNION ALL
SELECT 2,'bb','123wer'
UNION ALL
SELECT 3,'cc','ryrty'
UNION ALL
SELECT 4,'dd','sdfsd'
CREATE TABLE t_B
(ID int,name VARCHAR(200),
--pwd VARCHAR(200)
pwd varbinary(200)--必须是varbinary类型才可以的,因为加密后是2进制的数据(感谢1楼回复)
)

--打开之前创建的由证书加密的对称密钥
OPEN SYMMETRIC KEY SymmetricByCert
DECRYPTION BY CERTIFICATE CertTest
--利用这个密钥加密数据并插入新建的表
insert t_B(
ID,
name,
pwd
)
select
ID,
name,
pwd =EncryptByKey(KEY_GUID('SymmetricByCert'), pwd)
from t_A

select * from t_B

OPEN SYMMETRIC KEY SymmetricByCert
DECRYPTION BY CERTIFICATE CertTest
select
ID,
name,
pwd = convert(varchar(200), DecryptByKey(pwd))
from t_B

drop table t_A
drop table t_B


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息