惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

The Cloudflare Blog
小众软件
小众软件
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
博客园 - 司徒正美
V
Visual Studio Blog
G
Google Developers Blog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
月光博客
月光博客
aimingoo的专栏
aimingoo的专栏
博客园_首页
Blog — PlanetScale
Blog — PlanetScale
博客园 - 聂微东
S
SegmentFault 最新的问题
T
The Blog of Author Tim Ferriss
D
Docker
Vercel News
Vercel News
Recent Announcements
Recent Announcements
Last Week in AI
Last Week in AI
爱范儿
爱范儿
J
Java Code Geeks
大猫的无限游戏
大猫的无限游戏

博客园 - Steven.zhou

Setting Up Database Mirroring Using Certificates get the server's infomation Raid(0,1,5,10,01) SQL Server 2005高可用性之镜像功能(http://tech.it168.com/db/s/2007-04-24/200704240837593.shtml) SQL Server 2005高可用性之复制(http://tech.it168.com/db/s/2007-05-15/200705150909375.shtml) SQL Server 2005高可用性之日志传送(http://tech.it168.com/db/s/2007-06-29/200706291229796_2.shtml) SQL Server 2005性能测试实践(读书笔记翻译http://www.testage.net/TestTech/PT/200702/1510.htm) Troubleshooting the Performance of a SQL Server Solution(读书笔记,全是copy原文的) 如何缩小SQL Server数据库日志文件 SQL Server一个特殊查询(http://searchdatabase.techtarget.com.cn/tips/206/2295706.shtml) sql server 2005几个好用易忘的功能 在SSIS中使用自定义的DLL文件 查看数据表的大小 Use Table-Valued Functions as Arrays in SQL Serve 在sql server 中如何移动tempdb到新的位置 动态sql语句返回值 得到所有的触发器(含DDL触发器) 得到数据库中所有用户表的字段、数据类型 在sql2005 中Execute的增强
sql 2005数据库加密实战
Steven.zhou · 2008-03-27 · via 博客园 - Steven.zhou

happydreamer(www.sz.js.cn,www.gyxk.com)2006-10-11 08:44:05 在 MS-SQL Server / 新技术前沿 提问

转贴自teched讲师:     牛可      
   
  基本概念:  
   
  第一层   服务主密钥    
   
  备份服务主密钥  
  backup   service   master   key   to   file='c:\smk.bak'  
  encryption   by   password='P@ssw0rd'  
     
  restore   service   master   key   from   file='c:\smk.bak'  
  decryption   by   password='P@ssw0rd'  
     
  第二层   数据库主密钥  
  1)必须先在该数据库上创建数据库主密钥才能使用  
  create   master   key   encryption   by   password='P@ssw0rd'  
     
  2)使用数据库主密钥  
  -如果数据库主密钥使用服务密钥进行保护,则在使用时会自动打开  
  opren   master   key   decryption   by   password='P@ssw0rd'  
     
  3)查看数据库主密钥状态  
  sys.symmetric_keys  
     
  4)备份数据库主密钥  
  backup   master   key   to   file='c:\smk.bak'  
  encryption   by   password='P@ssw0rd'  
     
  restore   master   key   from   file='c:\smk.bak'  
  decryption   by   password='P@ssw0rd'  
     
     
  数字证书  
  创建自签名  
  create   certificate   cert_myCert  
  encryption   by   password='P@ssw0rd'  
  with   subject='Self   Signed   Cert',  
  start_date='1/31/2006'  
  expiry_date='1/31/2008'  
     
     
  非对称密钥  
  创建新的密钥对  
  create   asymmetric   key   asy_Key1  
  with   algorithm=RSA_2048  
  encryption   by   password='P@ssw0rd'  
     
     
  对称密钥  
  创建新的密钥对  
  create   symmetric   key   SymKeyMarketing3  
  with   algorithm=AES_2048  
  encryption   by   certificate   asy_Key1  
     
  使用对称密钥  
  使用前必须打开  
  open   symmetric   SymKeyMarketing3  
  decryption   by   certificate   asy_Key1  
     
  sys.open_keys  
     
     
  数据列加密  
  -使用对称密钥加密大量的列数据  
  -考虑使用证书,非对称密钥保护对称密钥  
     
  防止绕过加密数据列的攻击-使用验证器  
     
  注:  
  在加密列上的索引将变得无效  
  加密数据列的长度增长,建议使用varbinary(max)数据类型  
  修改已有的dml语句以支持加密的数据列  
     
  -----***********示例1   了解数据库加密体系结构*****-----  
     
  --************(1)   服务主密钥  
  --准备工作  
  --创建测试数据库TestDB  
   
  --1)备份服务主密钥  
  backup   service   master   key   to   file='g:\smk.bak'  
  encryption   by   password='p@ssw0rd'  
     
  --2)生成新的主密钥  
  Alter   service   master   key   regenerate  
     
  --3)从备份文件还原服务主密钥  
  Restore   service   master   key   from   file=   file='g:\smk.bak'  
  encryption   by   password='p@ssw0rd'  
     
  --*************(2)   数据库主密钥  
  --1)为数据库创建数据库主密钥  
  create   master   key   encryption   by   password='p@ssw0rd'  
  go  
   
  --2)查看数据库加密状态  
  select   [name],is_master_key_encrypted_by_server    
  from   sys.databases   where   name='TestDB'  
     
  --3)查看数据库主密钥的信息  
  select   *   from   sys.symmetric_keys    
     
  --4)备份数据库主密钥  
  backup   master   key  
  to   file='g:\testdbkey.bak'  
  encryption   by   password='p@ssw0rd'  
     
  --5)删除服务主密钥对数据库主密钥的保护  
  --创建非对称密钥成功,自动使用服务主密钥解密并使用该数据库主密钥  
  create   asymmetric   key   asy_Testkey1   with   algorithm=RSA_1024  
  go  
  --删除服务主密钥对数据库主密钥的保护  
  alter   master   key  
  drop   encryption   by   service   master   key  
  go  
     
  --查看数据库加密状态  
  select   [name],is_master_key_encrypted_by_server    
  from   sys.databases   where   name='TestDB'  
     
  --创建非对称密钥失败,因为数据库主密钥未打开  
  create   asymmetric   key   asy_Testkey2   with   algorithm=RSA_1024  
  go  
   
  --打开数据库主密钥  
  open   master   key   decryption   by   password='p@ssw0rd'  
  select   *   from   sys.openkeys  
  go  
   
  --创建非对称密钥成功  
  create   asymmetric   key   asy_Testkey2   with   algorithm=RSA_1024  
  go  
     
  --恢复服务主密钥对数据库主密钥的保护  
  alter   master   key  
  add   encryption   by   service   master   key  
  close   master   key  
  go  
     
  --*****(3)证书  
  --1)创建自签名证书  
  create   certificate   cert_Testcert  
  encryption   by   password='p@ssw0rd'  
  with   subject='TestCert1',  
  start_date='1/31/2006',  
  expiry_date='1/31/2008'  
  go  
   
  select   *   from   sys.certificates  
     
     
  --2)从文件导入证书  
  Create   certificate   cert_TestCert2  
  From   file=’g:\MSCert.cer’  
  Go  
     
  --   3)备份导出证书和密钥  
  backup   certificate   cert_Testcert  
  to   file='g:\Testcert.cer'  
  with   private   key  
  (decryption   by   password='p@ssw0rd',  
  file='g:\TestCert_pvt',--私密钥  
  encryption   by   password='p@ssw0rd'   )  
  go  
     
  --4)使用证书加解密数据  
  --加密:使用证书的公钥  
  declare   @cleartext   varbinary(200)  
  declare   @cipher   varbinary(200)  
  set   @cleartext=convert(   varbinary(200),'Test   text   string')  
  set   @cipher=EncryptByCert(Cert_ID('cert_TestCert'),@cleartext)  
  select   @cipher  
     
  --解密:使用证书的私钥  
  select   convert(varchar(200),DecryptByCert(Cert_ID('cert_TestCert'),@cipher,N'p@ssw0rd'))   as   [cleartext]  
     
     
  --5)   删除证书私钥  
  alter   certificate   cert_TestCert  
  remove   private   key  
  go  
     
  --加密成功  
  declare   @cleartext   varbinary(200)  
  declare   @cipher   varbinary(200)  
  set   @cleartext=convert(   varbinary(200),'Test   text   string')  
  set   @cipher=EncryptByCert(Cert_ID('cert_TestCert'),@cleartext)  
  select   @cipher  
     
  --解密失败:因为私钥被删除  
  select   convert(varchar(200),DecryptByCert(Cert_ID('cert_TestCert'),@cipher,N'p@ssw0rd'))   as   [cleartext]  
     
     
  --***(4)   非对称密钥  
  --1)使用sn.exe生成非对称密钥,安装vs2005后有sn.exe,   在命令行方式下执行  
  sn   -k   g:\asy_Test.key  
     
  --2)从文件创建非对称密钥  
  create   asymmetric   key   asm_Test  
  from   file='g:\asy_Test.key'  
  encryption   by   password='p@ssw0rd'  
  go  
     
  select   *   from   sys.asymmetric_keys