`
bolutes
  • 浏览: 870801 次
文章分类
社区版块
存档分类
最新评论

在 SQL Server 中为存储过程签名

 
阅读更多

从 SQL Server 2005 开始,您可以使用证书或非对称密钥为存储过程签名。 此设计适用于无法通过所属权链继承权限或所属权链中断的方案,如动态 SQL。 然后您可以创建一个映射到该证书的用户,对存储过程需要访问的对象授予证书用户权限。

在执行存储过程时,SQL Server 会将证书用户的权限与调用方的权限组合在一起。 与 EXECUTE AS 子句不同,它不更改过程的执行上下文。 返回登录名和用户名的内置函数会返回调用方的名称,而不是证书用户的名称。

数字签名是用签名人的私钥加密的数据摘要。 该私钥可确保数字签名对于其持有者或所有者是唯一的。 您可以为存储过程、函数或触发器签名。

注意:您可以在 master 数据库中创建证书以便授予服务器级权限。

<!---->

当使用证书为存储过程签名时,会使用私钥创建由该存储过程代码的加密哈希组成的数据摘要。 在运行时,数据摘要将使用公钥解密并与存储过程的哈希值进行比较。 修改存储过程会使哈希值无效,使数字签名不再匹配。 这可防止无权访问私钥的人更改存储过程代码。 因此,每次修改过程时都必须重新为过程签名。

为模块签名涉及以下四个步骤:

  1. 使用 Transact-SQL CREATE CERTIFICATE [certificateName] 语句创建一个证书。 此语句具有多个用于设置开始日期、结束日期和密码的选项。 默认的到期日期为一年

  2. 使用 Transact-SQL CREATE USER [userName] FROM CERTIFICATE [certificateName] 语句创建与该证书关联的数据库用户。 此用户仅存在于数据库中,不与登录名关联。

  3. 向证书用户授予访问数据库对象所需的权限。

注意:证书不能向用户授予已经使用 DENY 语句撤消的权限。 DENY 始终优先于 GRANT,以防止调用方继承授予给证书用户的权限。

  1. 使用 Transact-SQL ADD SIGNATURE TO [procedureName] BY CERTIFICATE [certificateName] 语句通过证书为过程签名。

以上内容转自:http://msdn.microsoft.com/zh-cn/library/bb669102.aspx

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics