【问题标题】:SQL Server: Grant execute without grant dmlSQL Server:授予执行而不授予 dml
【发布时间】:2011-06-02 14:20:17
【问题描述】:

我有一个只有 db_reader 权限的 db 用户。 (他对所有东西都有 SELECT)。

我有 100 个存储过程。我希望他能够只执行 SELECT SP 而不是 DML。不幸的是,授予他“执行”所有权限 - 允许他也执行 DML(插入/更新/删除)。

有办法解决吗?

(我不想在所有 SP 上运行并给他特定功能的特定授权,因为我希望它也支持未来的变化和未来的 SP)

【问题讨论】:

  • 不明白为什么我得了-1。认为这是一个合理的问题。
  • 我也不懂,所以我赞成平衡它。

标签: sql-server-2008 database-permissions


【解决方案1】:

可以按架构应用 SQL Server 中的权限。将您的 SELECT 过程放入单独的架构中并允许对其执行 EXEC 权限。

【讨论】:

  • 然后我必须亲自挑选 SP。这对未来的发展来说是一个痛苦。
  • 这就是你必须做的。
【解决方案2】:
  • 在数据库中创建角色
  • 使用下面的代码将角色添加到 每个“选择”存储 程序

    使用 [YourDBNameHere] 走 GRANT EXECUTE ON [TheSchemaNameHere].[YourSPNameHere] TO [YourRoleNameHere] 去吧

  • 将使用添加到角色

  • 移除“全选”的用户权限

【讨论】:

  • 然后我必须亲自挑选 SP。这对未来的发展来说是一个痛苦。
  • @Faruz 通过添加组,您只需选择一次 sp。将用户添加到组。永远不要只与用户组合作,但你知道
  • 感谢您的回答。问题是 SP 每次构建都会改变,有新的,更新的,甚至很少删除的。所以我需要在每次构建时都维护这个列表,这很痛苦。
【解决方案3】:

没有聪明的办法,不管是不是和其他cmets一样痛苦

  • 单独许可(在其他答案中)
  • 使用架构(在其他答案中)
  • 在所有表上使用触发器

DENY or db_denydatareader 将无法在表级别工作

存储过程可以运行任何代码:无法区分选择过程或 DML 过程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2011-09-25
    • 2015-12-01
    • 2011-09-07
    相关资源
    最近更新 更多