﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>博客园-stswordman</title><link>http://www.cnblogs.com/stswordman/</link><description>人的梦想 是不会完结的</description><language>zh-cn</language><lastBuildDate>Sat, 06 Sep 2008 19:27:09 GMT</lastBuildDate><pubDate>Sat, 06 Sep 2008 19:27:09 GMT</pubDate><ttl>60</ttl><item><title>删除用户出现的错误</title><link>http://www.cnblogs.com/stswordman/archive/2008/08/28/1278704.html</link><dc:creator>stswordman</dc:creator><author>stswordman</author><pubDate>Thu, 28 Aug 2008 07:21:00 GMT</pubDate><guid>http://www.cnblogs.com/stswordman/archive/2008/08/28/1278704.html</guid><wfw:comment>http://www.cnblogs.com/stswordman/comments/1278704.html</wfw:comment><comments>http://www.cnblogs.com/stswordman/archive/2008/08/28/1278704.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/stswordman/comments/commentRss/1278704.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/stswordman/services/trackbacks/1278704.html</trackback:ping><description><![CDATA[<font size="1">
<p>drop user u1</p>
<p>出现如下错误：</p>
<p>Msg 15136, Level 16, State 1, Line 1</p>
<p>The database principal is set as the execution context of one or more procedures, functions, or event notifications and cannot be dropped.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>执行如下语句</p>
<p>select *from sys.sql_modules where execute_as_principal_id=database_principal_id('u1')</p>
<p>&nbsp;</p>
<p>删除/修改 结果集中的存储过程</p>
</font>
<img src ="http://www.cnblogs.com/stswordman/aggbug/1278704.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42123/" target="_blank">[新闻]Google 10周年大事记</a>]]></description></item><item><title>SQL Server 2005: About login password hashes</title><link>http://www.cnblogs.com/stswordman/archive/2008/08/11/1264825.html</link><dc:creator>stswordman</dc:creator><author>stswordman</author><pubDate>Sun, 10 Aug 2008 16:57:00 GMT</pubDate><guid>http://www.cnblogs.com/stswordman/archive/2008/08/11/1264825.html</guid><wfw:comment>http://www.cnblogs.com/stswordman/comments/1264825.html</wfw:comment><comments>http://www.cnblogs.com/stswordman/archive/2008/08/11/1264825.html#Feedback</comments><slash:comments>6</slash:comments><wfw:commentRss>http://www.cnblogs.com/stswordman/comments/commentRss/1264825.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/stswordman/services/trackbacks/1264825.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0cm 0cm 10pt; line-height: normal; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto; mso-outline-level: 1"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">目前人们对于</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">处理登录密码的方式存在一些误解。希望阅读本文后，你能够对这些概念有清楚的认识。需要注意的是，只有</span><font face="Calibri">SQL</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">验证才会涉及到登录密码，</span><font face="Calibri">WINDOWS</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">验证模式不需要密码。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">第一个错误概念是</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">会对登录密码进行加密，然后储存起来。这是错误的。</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">存储的是经过</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的密码。</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和加密的不同之处在于其难于反向破解</span><font face="Calibri">--</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">但是对于加密算法而言，只要掌握密钥就可以轻易获得明文。从</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的字符中找出原始明文是非常困难的（除非你已经知道了明文）。不选择加密而选择</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的优点是无需保护密钥（</span><a href="http://blogs.msdn.com/lcris/archive/2006/11/30/who-needs-encryption.aspx"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">参见之前的文章</span></a><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">）。那么</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">是如何处理登录密码的呢？登录时，首先对用户提交的密码进行</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">处理，然后和</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">存储的</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的密码进行比较。如果匹配，则登录成功。当然，你也可以使用一个错误的密码成功登陆</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，只要</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的文本和原始密码的</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">值一致即可。但找出这样一个不同的密码是非常困难的（比中乐透要难多了）。同时也要记住，这种算法的强度也依赖于密码自身是否难猜。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">那么怎样去破解登录密码呢？主要的方法就是建立一个集合（通常叫做字典），该集合内包含可能和登录密码匹配的文本，然后依次尝试集合中的所有文本，直到成功匹配。字典可以包含日期，各种语言的名词，数字或特殊字符等等。因此，保护密码的主要方法就是尽量选择一个不会出现在字典内的文本作为密码。如果你想选择一个好的密码，可以搜索关键字</span><font face="Calibri">"how to choose a password"</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，你会找到许多很好的建议。即使你认为你已经选择了一个好的密码，你也应该浏览这些内容</span><font face="Calibri">-----</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">你也许会发现你的密码并没有想象中的那么&#8220;强壮&#8221;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">边注：一些文档将</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">称之为&#8220;难以逆转的加密&#8221;，我不同意这种观点。我觉得&#8220;不可逆转的加密&#8221;本身就很矛盾，因为加密中的&#8220;逆转&#8221;是指找到合适的解密密钥。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">第二个错误的概念是：</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">所用的</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">算法是</span><font face="Calibri">MS</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">内部开发的。我要阐述一下关于</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">算法的历史，但是之前我要声明：这是错误的。</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">从</span><font face="Calibri">2000</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">开始使用</span><font face="Calibri">SHA1</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">算法，</span><font face="Calibri">6.5</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">本版和</span><font face="Calibri">7.0</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">版本使用的算法为</span><font face="Calibri">Snefru</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">。关于</span><font face="Calibri">6.5</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">版本之前的情况我并不清楚，因为我是在</span><font face="Calibri">SQLSERVER6.5</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">加入的。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">接下来是对</span><font face="Calibri">6.5</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">及以后本版的的概述。在</span><font face="Calibri">6.5</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">版本中，密码只能是</span><font face="Calibri">ASCII</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">字符，因此</span><font face="Calibri">Snefru</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">算法也只应用于</span><font face="Calibri">ASCII</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">字符。在</span><font face="Calibri">7.0</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">版本中，</span><font face="Calibri">Unicode</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">字符也可以作为密码，因此</span><font face="Calibri">Snefru</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">算法也应用到了</span><font face="Calibri">Unicode</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">字符。这是</span><font face="Calibri">6.5</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><font face="Calibri">7.0</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中的主要不同。在</span><font face="Calibri">2000</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">版本中，使用的</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">算法改为</span><font face="Calibri">SHA1,</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">但也向后兼容。</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">会保存经过</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的密码，同时也会保留一份将密码转换成大写形式的</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的文本，这样就允许大小写不敏感的密码。</span><font face="Calibri">David Litchfield </font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的写过一篇长，批评了这个问题。</span><span lang="ZH-CN"><font face="Calibri"> </font></span><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">有一点非常重要：大小写不敏感的</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">更容易被破解，因为这减小了字典的大小。</span><span lang="ZH-CN"><font face="Calibri"> </font></span><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">基于此原因，</span><font face="Calibri">SQLSERVER2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">没有采用大小写不敏感的的做法，这样更有利于安全。</span><font face="Calibri">SQLSERVER2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中的另一个改变是删除了一些系统视图，</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的密码只对</span><font face="Calibri">sysadmin</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">可见。</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 10pt"><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">在应用中，很少会使用到</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的密码。</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">变化后的密码主要应用于</span><font face="Calibri">CREATE LOGIN DDL</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><a href="http://blogs.msdn.com/lcris/archive/2007/02/19/sql-server-2005-some-new-security-features-in-sp2.aspx"><font face="Calibri">SP2</font></a><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后</span><font face="Calibri">ALTER LOGIN DDL</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中。</span><span lang="ZH-CN"><font face="Calibri"> </font></span><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">除非万不得已，最好不要使用</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">后的密码。只有在下面的场景中应使用</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">密码：应用程序需要在各个服务器间使用相同的密码。</span><font face="Calibri"> CREATE LOGIN DLL</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">可以应用于</span><font face="Calibri">SQLSERVER7.0,2000</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">和</span><font face="Calibri">2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中，并在</span><font face="Calibri">2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中支持</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">选项；而</span><font face="Calibri">ALTER LOGIN DDL</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">只在</span><font face="Calibri">2000</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">及</span><font face="Calibri">2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中使用。请注意，</span><font face="Calibri">SQLSERVER2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">不再支持</span><font face="Calibri">SQLSERVER6.5</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">里的</span><font face="Calibri">HASH</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">。</span><font face="Calibri">SQLSERVER2000</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中对大小写不敏感的特性也在</span><font face="Calibri">2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">中移除。如果将</span><font face="Calibri">SQLSERVER</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">从</span><font face="Calibri">7.0</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">升级到</span><font face="Calibri">2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">，其秘密存储的格式会在以下任意情况发生时转换到</span><font face="Calibri">SQLSERVER2005</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">的格式：登录成功或者成功改变密码（当指定了</span><font face="Calibri">OLD_PASSWORD</font><span lang="ZH-CN" style="font-family: 宋体; mso-fareast-font-family: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-theme-font: minor-fareast; mso-hansi-font-family: Calibri; mso-hansi-theme-font: minor-latin">）</span></p>
<p>原文地址：<a href="http://blogs.msdn.com/lcris/archive/2007/04/30/sql-server-2005-about-login-password-hashes.aspx">SQL Server 2005: About login password hashes</a></p>
<p>&nbsp;</p>
<p>虽然SHA1早已经被破解了，但是理解SQLSERVER密码的存储方式仍然非常重要。因此我翻译此文，希望对您有所帮助</p>
<p>&nbsp;</p>
<p>4:19 PM 8/11/2008</p>
<p>两个KB:<span id="_ctl0_MainContent_PostFlatView"></p>
<p><a href="http://support.microsoft.com/kb/918992"><font color="#1a8bc8">如何在 SQL Server 2005 实例之间传输登录和密码</font></a> </p>
<p></span><a href="http://support.microsoft.com/kb/246133"><font color="#1a8bc8">如何在 SQL Server 实例之间传输登录和密码 </font></a></p>
<img src ="http://www.cnblogs.com/stswordman/aggbug/1264825.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42122/" target="_blank">[新闻]Google上下二十年</a>]]></description></item><item><title>xp_cmdshell</title><link>http://www.cnblogs.com/stswordman/archive/2008/08/04/1259521.html</link><dc:creator>stswordman</dc:creator><author>stswordman</author><pubDate>Sun, 03 Aug 2008 16:40:00 GMT</pubDate><guid>http://www.cnblogs.com/stswordman/archive/2008/08/04/1259521.html</guid><wfw:comment>http://www.cnblogs.com/stswordman/comments/1259521.html</wfw:comment><comments>http://www.cnblogs.com/stswordman/archive/2008/08/04/1259521.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.cnblogs.com/stswordman/comments/commentRss/1259521.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/stswordman/services/trackbacks/1259521.html</trackback:ping><description><![CDATA[<p class="MsoNormal"><span class="SpellE"><span style="font-family: SimSun">xp_cmdshell</span></span><span lang="ZH-CN" style="font-family: SimSun">可以以</span><span style="font-family: SimSun">SQLSERVER的<span lang="ZH-CN">上下文（也就是启动</span><span class="SpellE">sqlserver</span><span lang="ZH-CN">服务的</span>windows<span lang="ZH-CN">账户）或代理账户的上下文（通过为</span><span class="SpellE">xp_cmdshell</span><span lang="ZH-CN">设置凭据）调用操作系统的任意命令。</span> <span class="SpellE">xp_cmdshell</span><span lang="ZH-CN">非常灵活，实际上我想说它实在太灵活了，用户可以通过</span><span class="SpellE">xp_cmdshell</span><span lang="ZH-CN">执行任何命令，并且没有什么好的方法可以去限制这种灵活性，这简直为它的滥用大行方便。</span></span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal"><span lang="ZH-CN" style="font-family: SimSun">在许多情况下，为了执行操作系统中的操作，人们开启了</span><span class="SpellE"><span style="font-family: SimSun">xp_cmdshell</span></span><span lang="ZH-CN" style="font-family: SimSun">，并且授权那些非</span><span class="SpellE"><span style="font-family: SimSun">sysadmin</span></span><span lang="ZH-CN" style="font-family: SimSun">角色的帐户可以去调用</span><span class="SpellE"><span style="font-family: SimSun">xp_cmdshell</span></span><span lang="ZH-CN" style="font-family: SimSun">，但并没有认识到这些用户可以执行任意命令，在某些情况下，这些用户可以通过</span><span class="SpellE"><span style="font-family: SimSun">xp_cmdshell</span></span><span lang="ZH-CN" style="font-family: SimSun">将自己加入到</span><span class="SpellE"><span style="font-family: SimSun">sysadmin</span></span><span lang="ZH-CN" style="font-family: SimSun">角色甚至提升为</span><span style="font-family: SimSun">windows<span lang="ZH-CN">的管理员</span>.<span lang="ZH-CN">很明显，这并不是我们想要的</span>. <span class="SpellE">Xp_cmdshell</span><span lang="ZH-CN">非常难控制，即使对它的使用进行了监测，也仍然会让攻击者在被逮住之前大用特用，而那时破坏可能已经发生了。</span></span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal"><span lang="ZH-CN" style="font-family: SimSun">一般来讲，你绝对要避免使用</span><span class="SpellE"><span style="font-family: SimSun">xp_cmdshell</span></span><span lang="ZH-CN" style="font-family: SimSun">，如果可能，你应该将其应用与其脱离。比较好的方式可能是使用</span><span style="font-family: SimSun">CLR<span lang="ZH-CN">，在开发人员可控的范围内创建一个可以执行&#8221;外部访问</span>/<span lang="ZH-CN">不安全&#8221;（</span>external access/unsafe<span lang="ZH-CN">）操作的程序集</span>(<span lang="ZH-CN">最好使用<a href="http://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html" target="_blank">数字签名</a>来建立信任</span>)<span lang="ZH-CN">来执行需要的操作。优点如下：</span></span></p>
<p class="MsoListParagraphCxSpFirst" style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal"><span style="font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="ZH-CN" style="font-family: SimSun">除了外部</span><span style="font-family: SimSun">/<span lang="ZH-CN">不安全的信任机制（也就是通过签名）的优点，该方法还不依赖于服务器设置</span></span></p>
<p class="MsoListParagraphCxSpMiddle" style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal"><span style="font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span class="SpellE"><span style="font-family: SimSun">sysadmin</span></span><span lang="ZH-CN" style="font-family: SimSun">可以在需要时撤销这种信任关系而不会影响其他应用。</span></p>
<p class="MsoListParagraphCxSpLast" style="margin-bottom: 0pt; text-indent: -0.25in; line-height: normal"><span style="font-family: Symbol">&#183;<span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span><span lang="ZH-CN" style="font-family: SimSun">更好的粒度控制和孤立性</span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal"><span lang="ZH-CN" style="font-family: SimSun">但是请记住</span><span style="font-family: SimSun">CLR<span lang="ZH-CN">并不能解决所有的问题</span>. <span lang="ZH-CN">如果要给予应用程序（该程序会以</span>SQLSERVER<span lang="ZH-CN">启动账户的身份或者</span>OS<span lang="ZH-CN">上的特权用户的身份执行执行操作）一定程度的信任，你要确保应用程序编码良好的，</span></span><span lang="ZH-CN" style="font-family: SimSun">没有其他安全漏洞（例如代码注入，</span><span style="font-family: SimSun">buffer<span lang="ZH-CN">溢出等等），并且是可控（也就是，不允许随意任意的命令或者打开系统中的文件等等）</span></span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal"><span style="font-family: SimSun">&nbsp;<span lang="ZH-CN">如果数据库管理员不希望用户在</span>SQLSERVER<span lang="ZH-CN">中使用</span>CLR<span lang="ZH-CN">而将其禁用，可以使用其他的方式，创建一个</span>T-SQL<span lang="ZH-CN">的存储过程，里面含有需要在操作系统上调用的命令，然后通过</span>Execute as<span lang="ZH-CN">或者数字签名来暂时将调用者提升为</span><span class="SpellE">sysadmin</span>.<span lang="ZH-CN">使用这种方法是请确保不要有用户输入 （例如为调用命令而使用参数）；或者如果你需要使用输入参数的命令，确保对输入进行验证</span></span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal"><span lang="ZH-CN" style="font-family: SimSun">我列出一些和</span><span style="font-family: SimSun">SQL CLR<span lang="ZH-CN">，数字签名有关的链接，希望这些信息能够对你有所帮助</span></span></p>
<p class="MsoNormal" style="margin-bottom: 1pt; margin-left: 0.5in; text-indent: -0.25in; line-height: normal; margin-right: 0in"></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms187861.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">TRUSTWORTHY Database property</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms187648.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">Security Considerations for Databases and Database Applications</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms191465.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">Permissions Hierarchy</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms191296.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">Understanding Context Switching</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms181362.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">Execute As</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms188304.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">Extending Database Impersonation using Execute As</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms345102.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">Module Signing</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms189524.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">CREATE ASSEMBLY</font></a></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt 0.25in; text-indent: -0.25in; mso-list: l1 level1 lfo2; tab-stops: list .25in" minmax_bound="true"><span style="font-size: 9pt; font-family: Symbol; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol" minmax_bound="true"><span style="mso-list: Ignore" minmax_bound="true">&#183;<span style="font: 7pt 'Times New Roman'" minmax_bound="true">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><a href="http://msdn2.microsoft.com/en-us/library/ms345106.aspx" minmax_bound="true"><font face="Times New Roman" size="3" minmax_bound="true">Creating an Assembly</font></a><font face="Times New Roman" size="3" minmax_bound="true"> </font></p>
<p class="MsoNormal" style="margin-bottom: 1pt; margin-left: 0.5in; text-indent: -0.25in; line-height: normal; margin-right: 0in">&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal"><span lang="ZH-CN" style="font-size: 12pt; font-family: SimSun">非常感谢</span><span style="font-size: 12pt">Byham, Laurentiu Cristofor, <span class="SpellE">Ruslan</span> <span class="SpellE">Ovechkin</span>, Jack <span class="SpellE">Richins</span> </span><span lang="ZH-CN" style="font-size: 12pt; font-family: SimSun">和</span><span style="font-size: 12pt"> Sameer Tejani</span><span lang="ZH-CN" style="font-size: 12pt; font-family: SimSun">的帮助</span></p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">原文地址：<a href="http://blogs.msdn.com/sqlsecurity/archive/2008/01/10/xp-cmdshell.aspx">http://blogs.msdn.com/sqlsecurity/archive/2008/01/10/xp-cmdshell.aspx</a>&nbsp;</p>
<p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal">&nbsp;</p>
<img src ="http://www.cnblogs.com/stswordman/aggbug/1259521.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42120/" target="_blank">[新闻]中华英才网面临外资吞并</a>]]></description></item><item><title>OPEN SYMMETRIC KEY scope in SQL Server </title><link>http://www.cnblogs.com/stswordman/archive/2008/08/01/1257951.html</link><dc:creator>stswordman</dc:creator><author>stswordman</author><pubDate>Fri, 01 Aug 2008 02:29:00 GMT</pubDate><guid>http://www.cnblogs.com/stswordman/archive/2008/08/01/1257951.html</guid><wfw:comment>http://www.cnblogs.com/stswordman/comments/1257951.html</wfw:comment><comments>http://www.cnblogs.com/stswordman/archive/2008/08/01/1257951.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.cnblogs.com/stswordman/comments/commentRss/1257951.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/stswordman/services/trackbacks/1257951.html</trackback:ping><description><![CDATA[摘要: 最近我收到一些关于对称密钥有效范围的问题，特别是在模块内（存储过程）打开对称密钥。其中一个问题是,如果在存储过程内执行打开密钥（OPEN SYMMETRIC KEY）的操作，而退出存储过程前没有将密钥关闭，会导致密钥&#8220;泄露&#8221;到模块以外。在BOL的OPEN SYMMETRIC KEY（在备注下方）文章中，我们已经写明，打开的密钥在整个会话范文内有效，而仅仅是在执行上下文内（包&nbsp;&nbsp;<a href='http://www.cnblogs.com/stswordman/archive/2008/08/01/1257951.html'>阅读全文</a><img src ="http://www.cnblogs.com/stswordman/aggbug/1257951.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42119/" target="_blank">[新闻]软件收入百强张榜 华为中兴海尔列前三</a>]]></description></item><item><title>SQL Server 2005: 如何让用户只能加密数据却不能解密数据</title><link>http://www.cnblogs.com/stswordman/archive/2008/07/31/1257025.html</link><dc:creator>stswordman</dc:creator><author>stswordman</author><pubDate>Thu, 31 Jul 2008 01:46:00 GMT</pubDate><guid>http://www.cnblogs.com/stswordman/archive/2008/07/31/1257025.html</guid><wfw:comment>http://www.cnblogs.com/stswordman/comments/1257025.html</wfw:comment><comments>http://www.cnblogs.com/stswordman/archive/2008/07/31/1257025.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.cnblogs.com/stswordman/comments/commentRss/1257025.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/stswordman/services/trackbacks/1257025.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">我经常被问及这样的问题，能否让一个用户有加密数据的能力却不能解密数据呢？</font></span><span lang="ZH-CN" style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"> </span><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">答案是：可以。但在</span></font><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">我展示这个方法之前，</font></span><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">我们先稍微讨论一下对称密钥（</font></span><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'">symmetric key</span><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">）。</font></span><span lang="ZH-CN" style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"> </span><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">用户能否加密或解密数据取决于用户能否够打</span></font><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">开这个密钥。</font></span><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"> </span><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">如果用户可以打开密钥，那么他既能加密也能解密。</font></span><span lang="ZH-CN" style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"> </span><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">要想限制用户去使用密钥，需要删除用户打开密钥</span></font><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">的能力。</font></span><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">我们可以创建一个存储过程，将加密和打开密钥的过程封装进去，并让这个存储过程有权限执行这些操作</span></font><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">（通过</span><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"><a href="http://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html"><span lang="ZH-CN" style="font-family: SimSun; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma"><font color="#800080">签名</font></span></a></span><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">），然后赋予用户</span></font><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">执行存储过程的权限。这样用户就可以通过存储过程访问密钥，但不能直接方法问密钥。注意，如果用户</span></font><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">可以在并行操作中调用</font></span><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">这个存储过程，可能会导致密钥被用户直接使用(用户没有打开密钥的权限，却能执行加密/解密操作。译者注)。虽然我不认为这会被利用，但仍存在这种可能性。</span><o:p></o:p></font></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><font face="Simsun"><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma">下面是示例代码</span><o:p></o:p></font></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"><br />
</span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"></p>
<p>&nbsp;</p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000"><br />
</span><span style="color: #008080">--<br />
--</span><span style="color: #008080">&nbsp;这个demo演示让用户可以加密数据而不能解密数据</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">database</span><span style="color: #000000">&nbsp;test<br />
</span><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;test<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建数据库主密钥</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;master&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;encryption&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;password&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Avcptnwgu@)!)</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建一个证书，该证书用于加密下面的对称密钥</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_protect_skey_data&nbsp;</span><span style="color: #0000ff">with</span><span style="color: #000000">&nbsp;subject&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Certificate&nbsp;for&nbsp;encrypting&nbsp;<br />
symmetric&nbsp;key</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建对称密钥，用于加密数据</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;skey_data&nbsp;</span><span style="color: #0000ff">with</span><span style="color: #000000">&nbsp;algorithm&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;triple_des&nbsp;encryption&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;certificate&nbsp;<br />
cert_protect_skey_data<br />
</span><span style="color: #008080">--</span><span style="color: #008080">创建存储过程，使用对称密钥加密数据</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;sp_encrypt_with_skey_data<br />
&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">8000</span><span style="color: #000000">),<br />
&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">8000</span><span style="color: #000000">)&nbsp;output<br />
</span><span style="color: #0000ff">as</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
&nbsp;</span><span style="color: #0000ff">open</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;skey_data&nbsp;decryption&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_protect_skey_data<br />
&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;encryptbykey(key_guid(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">skey_data</span><span style="color: #ff0000">'</span><span style="color: #000000">),&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">)<br />
&nbsp;</span><span style="color: #0000ff">close</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;skey_data<br />
</span><span style="color: #0000ff">end</span><span style="color: #000000"><br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;验证该存储过程，&nbsp;在一个batch内执行下代码</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">),&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Plaintext</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;sp_encrypt_with_skey_data&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;output<br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Ciphertext:&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Plaintext:&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">open</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;skey_data&nbsp;decryption&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_protect_skey_data<br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="color: #0000ff">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">),&nbsp;decryptbykey(</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">))<br />
</span><span style="color: #0000ff">close</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;skey_data<br />
</span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建一个不能访问密钥的主体</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;login&nbsp;alice&nbsp;</span><span style="color: #0000ff">with</span><span style="color: #000000">&nbsp;password&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">TiA</span><span style="color: #ff0000">''</span><span style="color: #ff0000">ssptncgt#)))</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;alice<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;允许Alice执行该存储过程</span><span style="color: #008080"><br />
--</span><span style="color: #008080">&nbsp;我们希望她能够使用密钥加密</span><span style="color: #008080"><br />
--</span><span style="color: #008080">&nbsp;但不能解密</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;sp_encrypt_with_skey_data&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;alice<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;验证Alice可以加密</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;login&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Alice</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">suser_name</span><span style="color: #000000">()<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;Alice可以执行存储过程，但他不能访问密钥</span><span style="color: #008080"><br />
--</span><span style="color: #008080">&nbsp;密钥并没有所有权链的机制</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">),&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Plaintext</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;sp_encrypt_with_skey_data&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;output<br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Ciphertext:&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000"><br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;Alice明显无法直接访问密钥</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">open</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;skey_data&nbsp;decryption&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_protect_skey_data<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;revert&nbsp;context</span><span style="color: #008080"><br />
</span><span style="color: #000000">revert<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;现在对存储过程进行签名，使Alice能够访问密钥</span><span style="color: #008080"><br />
--</span><span style="color: #008080">&nbsp;创建用于签名的证书</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_sign2use_skey_data&nbsp;</span><span style="color: #0000ff">with</span><span style="color: #000000">&nbsp;subject&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Certificate&nbsp;for&nbsp;signing&nbsp;code&nbsp;that&nbsp;<br />
will&nbsp;use&nbsp;the&nbsp;symmetric&nbsp;key</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建一个映射到证书的用户</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;u_cert_sign2use_skey_data&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_sign2use_skey_data<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;授权</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">view</span><span style="color: #000000">&nbsp;definition&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">::skey_data&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;u_cert_sign2use_skey_data<br />
</span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;control&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;certificate::cert_protect_skey_data&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;u_cert_sign2use_skey_data<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;签名</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">add</span><span style="color: #000000">&nbsp;signature&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;sp_encrypt_with_skey_data&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_sign2use_skey_data<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;现在Alice可以真正地使用这个存储过程了</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;login&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">alice</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">suser_name</span><span style="color: #000000">()<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;注意，现在Alice仍然不能直接访问密钥</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">open</span><span style="color: #000000">&nbsp;symmetric&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;skey_data&nbsp;decryption&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;certificate&nbsp;cert_protect_skey_data<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;现在在一个batch执行一下代码，验证加密</span><span style="color: #008080"><br />
--</span><span style="color: #008080">&nbsp;注意加密会成功，但解密会失败</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">),&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Plaintext</span><span style="color: #ff0000">'</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varbinary</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">)<br />
</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;sp_encrypt_with_skey_data&nbsp;</span><span style="color: #008000">@plaintext</span><span style="color: #000000">,&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">&nbsp;output<br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Ciphertext:&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@ciphertext</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Plaintext:&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">convert</span><span style="color: #000000">(</span><span style="color: #0000ff">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">200</span><span style="color: #000000">),&nbsp;decryptbykey(</span><span style="color: #008000">@ciphertext</span><span style="color: #000000">))<br />
</span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
revert<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;cleanup</span><span style="color: #008080"><br />
</span><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;master<br />
</span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">database</span><span style="color: #000000">&nbsp;test<br />
</span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;login&nbsp;alice<br />
</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;EOD</span><span style="color: #008080"><br />
</span></div>
<p>&nbsp;<o:p></o:p></span></p>
<p><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'">&nbsp;<o:p></o:p></span></p>
<p><span lang="ZH-CN" style="font-size: 10pt; color: black; mso-ascii-font-family: Tahoma; mso-hansi-font-family: Tahoma; mso-bidi-font-family: Tahoma"><font face="Simsun">原文地址：</font></span><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"><a href="http://blogs.msdn.com/lcris/archive/2006/01/13/sql-server-2005-example-for-how-to-allow-a-user-to-encrypt-but-not-decrypt.aspx">http://blogs.msdn.com/lcris/archive/2006/01/13/sql-server-2005-example-for-how-to-allow-a-user-to-encrypt-but-not-decrypt.aspx</a><o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><span style="font-size: 10pt; color: black; font-family: 'Tahoma','sans-serif'"><o:p>&nbsp;</o:p></span></p>
<img src ="http://www.cnblogs.com/stswordman/aggbug/1257025.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42117/" target="_blank">[新闻]马云vs孙正义：两个“疯子”的对话</a>]]></description></item><item><title>SQL Server 2005: 存储过程签名</title><link>http://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html</link><dc:creator>stswordman</dc:creator><author>stswordman</author><pubDate>Tue, 29 Jul 2008 02:20:00 GMT</pubDate><guid>http://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html</guid><wfw:comment>http://www.cnblogs.com/stswordman/comments/1255322.html</wfw:comment><comments>http://www.cnblogs.com/stswordman/archive/2008/07/29/1255322.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.cnblogs.com/stswordman/comments/commentRss/1255322.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/stswordman/services/trackbacks/1255322.html</trackback:ping><description><![CDATA[<p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN" style="mso-ansi-language: EN"><font face="Calibri"><o:p></o:p></font></span>&nbsp;</p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><font face="Calibri">SQLSERVER 2005</font><span lang="ZH-CN" style="font-family: SimSun">提供的对存储过程签名</span><span style="color: #1f497d; font-family: SimSun; mso-themecolor: dark2">(signature)</span><span lang="ZH-CN" style="font-family: SimSun">功能是我最喜欢的。</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="ZH-CN" style="font-family: SimSun">如果我们要编写一个存储过程</span><font face="Calibri">,</font><span lang="ZH-CN" style="font-family: SimSun">执行该存储过程里的代码需要权限</span><font face="Calibri">P,</font><span lang="ZH-CN" style="font-family: SimSun">并且我们想要用户</span><font face="Calibri">Alice</font><span lang="ZH-CN" style="font-family: SimSun">可以执行这个存储过程，但是我们不想将权限</span><font face="Calibri">P</font><span lang="ZH-CN" style="font-family: SimSun">直接赋予给用户</span><font face="Calibri">Alice</font><span lang="ZH-CN" style="font-family: SimSun">，</span><span lang="ZH-CN"><font face="Calibri"> </font></span><span lang="ZH-CN" style="font-family: SimSun">我们可以用证书</span><font face="Calibri">(</font><span style="font-size: 12pt; color: #1f497d; font-family: SimSun; mso-themecolor: dark2">certificate</span><font face="Calibri">)</font><span lang="ZH-CN" style="font-family: SimSun">对这个存储过程进行签名来完成这一需求：</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l1 level1 lfo1"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">a)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">如果</span><font face="Calibri">P</font><span lang="ZH-CN" style="font-family: SimSun">是一个数据库级别的权限，那我们可以在相应的数据库中创建一个证书，使用证书创建一个用户</span><font face="Calibri">(user)</font><span lang="ZH-CN" style="font-family: SimSun">，然后将权限</span><font face="Calibri">p</font><span lang="ZH-CN" style="font-family: SimSun">授权给这个用户</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l1 level1 lfo1"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">b)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">如果</span><font face="Calibri">P</font><span lang="ZH-CN" style="font-family: SimSun">是一个服务器级别的权限，那我们能要在</span><font face="Calibri">master</font><span lang="ZH-CN" style="font-family: SimSun">数据库中创建一个证书，使用证书创建一个登录</span><font face="Calibri">(login)</font><span lang="ZH-CN" style="font-family: SimSun">，然后将权限</span><font face="Calibri">P</font><span lang="ZH-CN" style="font-family: SimSun">授权给这个登录</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><font face="Calibri">&nbsp; </font><span lang="ZH-CN" style="font-family: SimSun">签名之后，存储过程就会在执行期间获得权限</span><font face="Calibri">P</font><span lang="ZH-CN" style="font-family: SimSun">，而我们仅仅授予了</span><font face="Calibri">Alice</font><span lang="ZH-CN" style="font-family: SimSun">执行这个存储过程的权限。</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><font face="Calibri">&nbsp;&nbsp;&nbsp;&nbsp; </font><span lang="ZH-CN" style="font-family: SimSun">如果我们既需要服务器级别的权限，又需要数据库级别的权限，那么我们既要创建用户，又要创建登录。下面列出步骤：</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo2"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">1)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">在数据库中创建证书</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo2"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">2)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">创建一个用户</span><span style="color: #1f497d; font-family: SimSun; mso-themecolor: dark2">(user)</span><span lang="ZH-CN" style="font-family: SimSun">并映射到这个证书</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo2"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">3)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">将数据库级别的权限授予这个用户</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo2"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">4)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">备份这个证书</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo2"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">5)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">在</span><font face="Calibri">master</font><span lang="ZH-CN" style="font-family: SimSun">数据库中还原这个证书</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo2"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">6)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">创建一个登录</span><span style="color: #1f497d; font-family: SimSun; mso-themecolor: dark2">(login)</span><span lang="ZH-CN" style="font-family: SimSun">，并将登录映射到证书</span><o:p></o:p></p>
<p class="MsoListParagraph" style="margin: 0in 0in 0pt 0.5in; text-indent: -0.25in; mso-list: l0 level1 lfo2"><span style="mso-fareast-font-family: Calibri; mso-bidi-font-family: Calibri"><span style="mso-list: Ignore"><font face="Calibri">7)</font><span style="font: 7pt 'Times New Roman'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span></span></span><span lang="ZH-CN" style="font-family: SimSun">将服务器级别的权限授予给这个登录</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><font face="Calibri">&nbsp; </font><span lang="ZH-CN" style="font-family: SimSun">我们也可以先在</span><font face="Calibri">master</font><span lang="ZH-CN" style="font-family: SimSun">数据库中创建证书，然后再将其还原到用户</span><font face="Calibri">alice</font><span lang="ZH-CN" style="font-family: SimSun">工作的数据库。也就是证书的创建顺序并不重要，重要的是</span><font face="Calibri">master</font><span lang="ZH-CN" style="font-family: SimSun">数据库中的证书一定要和用户数据库中的相同。</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt; text-indent: 9pt"><span lang="ZH-CN" style="font-family: SimSun">下面是演示：</span><o:p></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt; text-indent: 9pt"><o:p><font face="Calibri">&nbsp;</font></o:p></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN" style="font-size: 12pt; font-family: 'Times New Roman','serif'; mso-ansi-language: EN">&nbsp;<o:p></o:p></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="EN" style="font-size: 12pt; font-family: 'Times New Roman','serif'; mso-ansi-language: EN"><o:p></p>
<div class="cnblogs_code"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008080">--</span><span style="color: #008080">&nbsp;目的</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">&nbsp;展示如何用证书签名一个存储过程,&nbsp;</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">并授予证书相应的权限</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">database</span><span style="color: #000000">&nbsp;demo;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;demo;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建一个存储过程，该过程会创建一个主体（包含登录和用户）</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">&nbsp;这需要服务器级别的ALTER&nbsp;ANY&nbsp;LOGIN&nbsp;权限</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">&nbsp;和数据库级别的&nbsp;ALTER&nbsp;ANY&nbsp;USER&nbsp;权限</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;sp_CreatePrincipal<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@name</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">256</span><span style="color: #000000">),<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">@password</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">128</span><span style="color: #000000">)<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">as</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">declare</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@sqlcmd</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">varchar</span><span style="color: #000000">(</span><span style="font-weight: bold; color: #800000">2000</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">begin</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">tran</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;create&nbsp;login</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@sqlcmd</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">create&nbsp;login&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">quotename</span><span style="color: #000000">(</span><span style="color: #008000">@name</span><span style="color: #000000">)&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">&nbsp;with&nbsp;password&nbsp;=&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">quotename</span><span style="color: #000000">(</span><span style="color: #008000">@password</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">''''</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@sqlcmd</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #008000">@@error</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">&lt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">rollback</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">tran</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Cannot&nbsp;create&nbsp;login</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;create&nbsp;user</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="color: #008000">@sqlcmd</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">create&nbsp;user&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">+</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">quotename</span><span style="color: #000000">(</span><span style="color: #008000">@name</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">exec</span><span style="color: #000000">&nbsp;(</span><span style="color: #008000">@sqlcmd</span><span style="color: #000000">);<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #008000">@@error</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">&lt;&gt;</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">0</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">rollback</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">tran</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">print</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Cannot&nbsp;create&nbsp;user</span><span style="color: #ff0000">'</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">commit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">tran</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">go</span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;调用这个存储过程</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">&nbsp;创建主体</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">sp_CreatePrincipal&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">alice</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Apufe@))%</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">我们需要让alice可以调用这个存储过程，创建新的主体，&nbsp;</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">&nbsp;但并不直接授予她权限（创建主体的权限，译者注）</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">on</span><span style="color: #000000">&nbsp;sp_CreatePrincipal&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;alice;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;目前&nbsp;alice还不能创建主体</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;login&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">alice</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />sp_CreatePrincipal&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">bob</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Apufe@))%</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />revert;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;使用证书对存储过程进行签名</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">&nbsp;首先我们要创建一个数据库主密钥（database&nbsp;master&nbsp;key）</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;master&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">&nbsp;encryption&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;password&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Apufe@))%</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal&nbsp;</span><span style="color: #0000ff">with</span><span style="color: #000000">&nbsp;subject&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">for&nbsp;signing&nbsp;procedure&nbsp;sp_CreatePrincipal</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;签名存储过程sp_CreatePrincipal</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">add</span><span style="color: #000000">&nbsp;signature&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;sp_CreatePrincipal&nbsp;</span><span style="color: #0000ff">by</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;现在签名完成了，可以将证书的私钥移除了</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal&nbsp;remove&nbsp;private&nbsp;</span><span style="color: #0000ff">key</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;对证书进行备份，随后在master数据库中将要使用该备份</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">backup</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">file</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">certSignCreatePrincipal.cer</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建一个用户并将用户映射到证书</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;u_certSignCreatePrincipal&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">通过授权映射映射的方式将ALTER&nbsp;ANY&nbsp;USER权限赋给证书&nbsp;&nbsp;（因为用户和证书是映射的，所以权限也就赋给了证书，SQLSERVER本身没有直接将权限赋给证书的方法。译者注）</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">any</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;u_certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;在master数据库中创建该证书</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;master;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">file</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">certSignCreatePrincipal.cer</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;创建登录并映射到证书</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">create</span><span style="color: #000000">&nbsp;login&nbsp;l_certSignCreatePrincipal&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;通过授权映射登录的方式将ALTER&nbsp;ANY&nbsp;LOGIN权限赋给证书</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">grant</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">alter</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">any</span><span style="color: #000000">&nbsp;login&nbsp;</span><span style="color: #0000ff">to</span><span style="color: #000000">&nbsp;l_certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;完成！</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;demo;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;验证一下，master数据库中的证书和demo数据库中的证书是一样的。</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">select</span><span style="color: #000000">&nbsp;c.name&nbsp;</span><span style="color: #0000ff">from</span><span style="color: #000000">&nbsp;sys.certificates&nbsp;c,&nbsp;master.sys.certificates&nbsp;mc&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;c.thumbprint&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;mc.thumbprint;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;现在alice可以创建主体了</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">execute</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">as</span><span style="color: #000000">&nbsp;login&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">alice</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />sp_CreatePrincipal&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">bob</span><span style="color: #ff0000">'</span><span style="color: #000000">,&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">Apufe@))%</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />revert;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;cleanup</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;u_certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;login&nbsp;l_certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">procedure</span><span style="color: #000000">&nbsp;sp_CreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;alice;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;login&nbsp;alice;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">user</span><span style="color: #000000">&nbsp;bob;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;login&nbsp;bob;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">use</span><span style="color: #000000">&nbsp;master;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;certificate&nbsp;certSignCreatePrincipal;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">drop</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">database</span><span style="color: #000000">&nbsp;demo;<br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;EOD</span><span style="color: #008080"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000"><br />
<img src="http://www.cnblogs.com/Images/OutliningIndicators/None.gif" align="top"  alt="" /></span></div>
<p class="MsoNormal" style="margin: 0in 0in 0pt">&nbsp;</o:p></span></p>
<p class="MsoNormal" style="margin: 0in 0in 0pt"><span lang="ZH-CN" style="font-size: 12pt; font-family: SimSun">原文：</span><span lang="ZH-CN" style="font-size: 12pt; font-family: 'Times New Roman','serif'"> </span><span lang="EN" style="font-size: 12pt; font-family: 'Times New Roman','serif'; mso-ansi-language: EN"><a href="http://blogs.msdn.com/lcris/archive/2005/06/15/sql-server-2005-procedure-signing-demo.aspx"><font color="#800080">SQL Server 2005: procedure signing demo</font></a><o:p></o:p></span></p>
  <img src ="http://www.cnblogs.com/stswordman/aggbug/1255322.html?type=1" width = "1" height = "1" /><br><br><a href="http://news.cnblogs.com/n/42116/" target="_blank">[新闻]消息称MySQL创始人已向Sun提交辞呈</a>]]></description></item><item><title>SQL Server 2005 helpful catalogs: crypt_properties and key_encryptions</title><link>http://www.cnblogs.com/stswordman/archive/2008/07/28/1254436.html</link><dc:creator>stswordman</dc:creator><author>stswordman</author><pubDate>Mon, 28 Jul 2008 03:04:00 GMT</pubDate><guid>http://www.cnblogs.com/stswordman/archive/2008/07/28/1254436.html</guid><wfw:comment>http://www.cnblogs.com/stswordman/comments/1254436.html</wfw:comment><comments>http://www.cnblogs.com/stswordman/archive/2008/07/28/1254436.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnblogs.com/stswordman/comments/commentRss/1254436.html</wfw:commentRss><trackback:ping>http://www.cnblogs.com/stswordman/services/trackbacks/1254436.html</trackback:ping><description><![CDATA[<p><span lang="ZH-CN" style="color: black; mso-bidi-font-family: Tahoma; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast"><font face="Simsun">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不久之前，我回答过一个问题：如找出被证书</font></span><span style="color: black; font-family: 'Times New Roman','serif'; mso-bidi-font-family: Tahoma; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast">(</span><em><span style="color: #1f497d; font-family: 'SimSun','serif'; mso-bidi-font-family: SimSun; mso-themecolor: dark2">certificate</span></em><span style="color: black; font-family: 'Times New Roman','serif'; mso-bidi-font-family: Tahoma; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast">)</span><span lang="ZH-CN" style="color: black; mso-bidi-font-family: Tahoma; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast"><font face="Simsun">加密的密钥。</font></span><span lang="ZH-CN" style="color: black; font-family: 'Times New Roman','serif'; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast"> </span><span lang="ZH-CN" style="color: black; mso-bidi-font-family: Tahoma; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast"><font face="Simsun">我写了一些查询，用于找出那些加密</font></span><span style="color: black; font-family: 'Times New Roman','serif'; mso-bidi-font-family: Tahoma; mso-fareast-font-family: SimSun; mso-fareast-theme-font: minor-fareast">,</span><span lang="ZH-CN" style="color: black; mso-bidi-font-family: Tahoma; mso-ascii-font-family: 'Times New Roman'; mso-fareast-font-family: SimSun; mso-hansi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast"><font face="Simsun">签名的信息。在展示这些查询之前，我会对这两个视图做个简要的介绍：</font></span><span style="font-size: 9pt; font-family: 'Tahoma','sans-serif'"><br />
</span><em><span style="color: #1f497d; font-family: 'SimSun','serif'; mso-bidi-font-family: Tahoma; mso-themecolor: dark2; mso-fareast-theme-font: minor-fareast">crypt_properties</span></em><em><span lang="ZH-CN" style="color: black; font-family: 'SimSun','serif'; mso-bidi-font-family: SimSun; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">视图保存了签名（</span></em><em><span style="color: #1f497d; font-family: 'SimSun','serif'; mso-bidi-font-family: Tahoma; mso-themecolor: dark2; mso-fareast-theme-font: minor-fareast">signature</span></em><em><span lang="ZH-CN" style="color: black; font-family: 'SimSun','serif'; mso-bidi-font-family: Tahoma; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-fareast-theme-font: minor-fareast">）相关的信息。可以用其中的</span></em><em><span style="color: black; font-family: 'SimSun','serif'; mso-bidi-font-family: SimSun; mso-fareast-theme-font: minor-fareast">thumbprint</s