使用证书的存储过程上的SQL Server签名

时间:2014-05-27 21:11:07

标签: sql sql-server stored-procedures sql-server-2012

我对示例at this link感到困惑。类似的例子存在here,但我更喜欢第一个。这里简要概述了我的困惑:

  1. 从证书创建用户(examplecertuser)。
  2. 授予从证书创建的用户(examplecertuser)的权限。
  3. 使用证书将签名添加到存储过程。
  4. 然后使用与前一个无关的单独登录(testuser)完成测试。这是我不明白的。
  5. 我不确定为什么创建了examplecertuser或者它的用途是什么。更重要的是,由于login(testuser)和证书创建用户(examplecertuser)之间没有连接,这意味着任何LOGIN都能够运行存储过程。我通过创建另一个登录并让它运行存储过程来验证这一点。

    我正在研究这个问题,以避免根据我阅读的所有建议进行数据库所有权链接。我的目标是授予用户运行存储过程的能力,该存储过程跨越多个数据库,但限制它们只运行该存储过程。使用我看到列出的示例,我想我将授予每个人运行存储过程的能力,而无法限制其他人。

    要以更直接的格式重新提问,"如何使用链接中的示例仅允许选定的登录来运行存储过程?" 用户(examplecertuser)似乎是授权的关键,但我没有看到用户和登录之间的任何关联。

1 个答案:

答案 0 :(得分:1)

代码签名使您能够在某些情况下(与任何时间相反)向基础对象授予权限。比如说,我有一张包含敏感信息的表格。我不希望任何人从中进行选择(即,编写“select * from myTable”),但我可以通过存储过程授予他们访问权限(因此我可以限制他们可以使用业务逻辑选择的内容)。所以我完成了对存储过程进行签名的练习。我仍然可以向单个用户授予(或拒绝)对该过程的执行权限。但是,当检查存储过程访问的基础对象的权限时,它将应用模块签名用户的权限(示例中为examplecertuser)。

关于您的具体问题

  1. 只有被授予存储过程执行权限的用户才能运行它
  2. 为了使此权限跨越多个数据库,您需要在每个数据库中创建证书和关联用户。