|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继server|加密|系统SQLServer2005加密系统(二)
紧接上一篇,再给一段用密钥加密数据的典范,这段代码对照复杂,年夜黄禁绝像践踏年夜余一样说我注水!!!
--------------------------------------------------------------------------------
--创立实行用数据库
USEmaster
IFEXISTS(SELECT[name]FROMsys.databasesWHERE[name]=Sales)
DROPDATABASESales
CREATEDATABASESales
IFEXISTS(SELECTprincipal_idFROMsys.server_principalsWHERE[name]=ryanAND[type]=S)
DROPLOGINryan
CREATElOGINryanWITHPASSWORD=P@ssw0rd
IFEXISTS(SELECTprincipal_idFROMsys.server_principalsWHERE[name]=teddyAND[type]=S)
DROPLOGINteddy
CREATElOGINteddyWITHPASSWORD=P@ssw0rd
GO
--创立用户ryan,并创立数据库主密钥
USESales
IFEXISTS(SELECT*FROMsys.database_principalsWHERE[name]=ryanAND[type]=S)
DROPUserryan
CREATEUSERryanFORLOGINryanWITHDEFAULT_SCHEMA=dbo
GO
IFEXISTS(SELECT*FROMsys.database_principalsWHERE[name]=teddyAND[type]=S)
DROPUserteddy
CREATEUSERteddyFORLOGINteddyWITHDEFAULT_SCHEMA=dbo
GO
CREATEMASTERKEYENCRYPTIONBYPASSWORD=P@ssw0rd
GO
--利用服务主密钥加密数据库主密钥,
--在此删除,由于发明数据库主密钥创立时默许及使用服务主密钥加密
--使用服务主密钥加密的数据库主密钥称为主动密钥办理
--能够使用以下查询语句是不是启用数据库主密钥的主动密钥办理
SELECT[name],is_master_key_encrypted_by_serverFROMsys.databasesWHERE[name]=Sales
--以下语句用于启用数据库主密钥的主动办理
--ALTERMASTERKEYADDENCRYPTIONBYSERVICEMASTERKEY
GO
--为ryan创立证书
IFEXISTS(SELECT[name]FROMsys.certificatesWHERE[name]=CERT_RYAN)
DROPCERTIFICATECERT_RYAN
CREATECERTIFICATECERT_RYANAUTHORIZATIONryan
--ENCRYPTIONBYPASSWORD=P@ssw0rd
--倡议不要利用暗码,由于经由测试,是用暗码的证书是使用暗码回护,
--而非数据库主密钥,可用以下语句测试证书的加密办法
--SELECT[name],pvt_key_encryption_type_descFROMsys.certificates
--WHERE[name]=CERT_DB
WITHSUBJECT=CertificateForDatabase,
START_DATE=01/01/2006,
EXPIRY_DATE=12/31/2015
GO
--为teddy创立证书
IFEXISTS(SELECT[name]FROMsys.certificatesWHERE[name]=CERT_TEDDY)
DROPCERTIFICATECERT_TEDDY
CREATECERTIFICATECERT_TEDDYAUTHORIZATIONteddy
--ENCRYPTIONBYPASSWORD=P@ssw0rd
--倡议不要利用暗码,由于经由测试,是用暗码的证书是使用暗码回护,
--而非数据库主密钥,可用以下语句测试证书的加密办法
--SELECT[name],pvt_key_encryption_type_descFROMsys.certificates
--WHERE[name]=CERT_DB
WITHSUBJECT=CertificateForDatabase,
START_DATE=01/01/2006,
EXPIRY_DATE=12/31/2015
GO
SELECT*FROMsys.certificates
--为ryan和teddy分离创立使用证书回护的对称暗码
CREATESYMMETRICKEYKey_SYM_RYANAUTHORIZATIONryan
WITHALGORITHM=TRIPLE_DES
ENCRYPTIONBYCERTIFICATECERT_RYAN
GO
CREATESYMMETRICKEYKey_SYM_TEDDYAUTHORIZATIONteddy
WITHALGORITHM=TRIPLE_DES
ENCRYPTIONBYCERTIFICATECERT_TEDDY
GO
--创立测试用表
IFEXISTS(SELECT[name]FROMsys.tablesWHERE[name]=encryption)
DROPTABLEencryption
CREATETABLEdbo.encryption
(
PTnchar(10),--PlainText
ETvarbinary(128),--EncryptedText
)
GO
GRANTSELECT,INSERTONencryptionTOryan
GRANTSELECT,INSERTONencryptionTOteddy
--完成筹办事情,入手下手测试加密
EXECUTEASLOGIN=ryan
OPENSYMMETRICKEYKey_SYM_RYANDECRYPTIONBYCERTIFICATECERT_RYAN
INSERTINTOencryption
VALUES(NRYAN,EncryptByKey(Key_GUID(Key_SYM_RYAN),NRYAN))
CLOSEALLSYMMETRICKEYS
REVERT
EXECUTEASLOGIN=teddy
OPENSYMMETRICKEYKey_SYM_TEDDYDECRYPTIONBYCERTIFICATECERT_TEDDY
INSERTINTOencryption
VALUES(NTEDDY,EncryptByKey(Key_GUID(Key_SYM_TEDDY),NTEDDY))
CLOSEALLSYMMETRICKEYS
REVERT
--测试数据已被加密
SELECT*FROMencryption
--解密数据
EXECUTEASLOGIN=ryan
OPENSYMMETRICKEYKey_SYM_RYANDECRYPTIONBYCERTIFICATECERT_RYAN
SELECTPT,CONVERT(nchar,DecryptByKey(ET))ASETFROMencryption
CLOSEALLSYMMETRICKEYS
REVERT
EXECUTEASLOGIN=teddy
OPENSYMMETRICKEYKey_SYM_TEDDYDECRYPTIONBYCERTIFICATECERT_TEDDY
SELECTPT,CONVERT(nchar,DecryptByKey(ET))ASETFROMencryption
CLOSEALLSYMMETRICKEYS
REVERT
但我们知道,若使用statement,并没有上述需要的数据。试想binlog中记录了一句updatetsetf1=3whereid=3。怎么恢复呢? |
|