【问题标题】:SQL Server stored procedures and permissionsSQL Server 存储过程和权限
【发布时间】:2011-09-22 23:42:50
【问题描述】:

是否可以拒绝 SQL Server 中所有内容的权限(例如选择、插入等)并通过存储过程授予临时权限。我只想使用存储过程来访问 sql 数据库中的数据。

这是可能的还是有其他方法?

【问题讨论】:

    标签: sql sql-server tsql permissions


    【解决方案1】:

    是的,这叫做ownership chaining,如果你授予proc执行权限,用户将能够执行proc并且它会工作,他会取回数据

    如果他随后尝试从 SSMS 中的表中进行选择,它将不起作用(前提是他不是数据读取器或更高级别的角色)

    请记住,动态 SQL 会中断 ownership chaining,如果您在存储过程中有动态 SQL,那么在这种情况下您将需要额外的权限

    【讨论】:

      【解决方案2】:

      这不仅适用于存储过程,也适用于视图。
      通常,您可以授予用户对“更高级别”对象(如视图或存储过程)的权限,而不必同时授予用户对基础表的权限。

      【讨论】:

        【解决方案3】:

        这是我的 SQL Server 支持的一个很好的模式。

        基本上,如果 proc 和表具有相同的所有者(通常是 dbo),则对存储过程具有权限的人根本不需要任何表权限。它叫ownership chaining

        注意:在这种情况下根本不会检查表的权限,因此也会忽略显式的“拒绝权限”(拒绝与“无权限”不同)

        这同样适用于视图、函数等(例如视图调用表、proc 调用视图……)

        【讨论】:

          猜你喜欢
          • 2018-12-19
          • 1970-01-01
          • 2010-11-28
          • 1970-01-01
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多