使用证书对存储过程进行SQL Server签名



我对这个链接的例子感到困惑。这里有一个类似的例子,但我更喜欢第一个。下面是我困惑的总结:

  1. 从证书中创建用户(exampleecertuser)
  2. 授予从证书中创建的用户(examplecertuser)权限。
  3. 使用证书向存储过程中添加签名。
  4. 然后使用与前一个无关的单独登录(testuser)完成测试。这就是我不明白的地方。

我不确定为什么创建examplecertuser或它的目的是什么。更重要的是,由于没有在登录(testuser)和创建的证书用户(examplecertuser)之间建立连接,这意味着ANY login能够运行存储过程。我通过创建另一个登录并让它也运行存储过程来验证这一点。

我正在研究这个,以避免数据库所有权链按照我读过的所有建议。我的目标是赋予用户运行跨多个数据库的存储过程的能力,但限制他们只能运行该存储过程。使用我列出的示例,我认为我将授予每个人运行存储过程的能力,而不限制其他人。

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

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

关于你的具体问题

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

最新更新