MSSQL网站制作之SQL Server 2005加密系统(二)
BlackHole黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继server|加密|系统SQLServer2005加密系统(二)紧接上一篇,再给一段用密钥加密数据的典范,这段代码对照复杂,年夜黄禁绝像践踏年夜余一样说我注水!!!
--------------------------------------------------------------------------------
--创立实行用数据库
USEmaster
IFEXISTS(SELECTFROMsys.databasesWHERE=Sales)
DROPDATABASESales
CREATEDATABASESales
IFEXISTS(SELECTprincipal_idFROMsys.server_principalsWHERE=ryanAND=S)
DROPLOGINryan
CREATElOGINryanWITHPASSWORD=P@ssw0rd
IFEXISTS(SELECTprincipal_idFROMsys.server_principalsWHERE=teddyAND=S)
DROPLOGINteddy
CREATElOGINteddyWITHPASSWORD=P@ssw0rd
GO
--创立用户ryan,并创立数据库主密钥
USESales
IFEXISTS(SELECT*FROMsys.database_principalsWHERE=ryanAND=S)
DROPUserryan
CREATEUSERryanFORLOGINryanWITHDEFAULT_SCHEMA=dbo
GO
IFEXISTS(SELECT*FROMsys.database_principalsWHERE=teddyAND=S)
DROPUserteddy
CREATEUSERteddyFORLOGINteddyWITHDEFAULT_SCHEMA=dbo
GO
CREATEMASTERKEYENCRYPTIONBYPASSWORD=P@ssw0rd
GO
--利用服务主密钥加密数据库主密钥,
--在此删除,由于发明数据库主密钥创立时默许及使用服务主密钥加密
--使用服务主密钥加密的数据库主密钥称为主动密钥办理
--能够使用以下查询语句是不是启用数据库主密钥的主动密钥办理
SELECT,is_master_key_encrypted_by_serverFROMsys.databasesWHERE=Sales
--以下语句用于启用数据库主密钥的主动办理
--ALTERMASTERKEYADDENCRYPTIONBYSERVICEMASTERKEY
GO
--为ryan创立证书
IFEXISTS(SELECTFROMsys.certificatesWHERE=CERT_RYAN)
DROPCERTIFICATECERT_RYAN
CREATECERTIFICATECERT_RYANAUTHORIZATIONryan
--ENCRYPTIONBYPASSWORD=P@ssw0rd
--倡议不要利用暗码,由于经由测试,是用暗码的证书是使用暗码回护,
--而非数据库主密钥,可用以下语句测试证书的加密办法
--SELECT,pvt_key_encryption_type_descFROMsys.certificates
--WHERE=CERT_DB
WITHSUBJECT=CertificateForDatabase,
START_DATE=01/01/2006,
EXPIRY_DATE=12/31/2015
GO
--为teddy创立证书
IFEXISTS(SELECTFROMsys.certificatesWHERE=CERT_TEDDY)
DROPCERTIFICATECERT_TEDDY
CREATECERTIFICATECERT_TEDDYAUTHORIZATIONteddy
--ENCRYPTIONBYPASSWORD=P@ssw0rd
--倡议不要利用暗码,由于经由测试,是用暗码的证书是使用暗码回护,
--而非数据库主密钥,可用以下语句测试证书的加密办法
--SELECT,pvt_key_encryption_type_descFROMsys.certificates
--WHERE=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(SELECTFROMsys.tablesWHERE=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。怎么恢复呢? 再开发调试阶段和OLAP环境中,外键是可以建立的。新版本中加入了SETNULL和SETDEFAULT属性,能够提供能好的级联设置。 这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。 SQLServer的异构移植功能个人感觉最好了。(如果对比过SQLServer的链接服务器和Oracle的透明网关的朋友会发现SQLServer的sp_addlinkedserver(openquery)异构数据库系列比Oracle真是强太多了。) 如安全管理、备份恢复、性能监控和调优等,SQL只要熟悉基本操作就可以,只要程序设计部分只要稍加了解即可(如存储过程、触发器等)。 比如日志传送、比如集群。。。 每天坚持做不一样的是,认真做笔录,定时复习。一个月你就可以有一定的收获。当然如果你想在sql方面有一定的造诣,你少不了需要看很多很多的书籍了。 原来公司用过MYSQL自己也只是建个表写个SQL 原来的计算字段其实和虚拟字段很像。只是管理方面好了而已,性能方面提高不多。但是SQL2005提供了计算字段的持久化,这就提高了查询的性能,但是会加重insert和update的负担。OLTP慎用。OLAP可以大规模使用。
页:
[1]