0

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

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

有办法解决吗?

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

4

3 回答 3

1

没有聪明的方法,不管它是否像其他评论一样痛苦

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

并且DENY 或 db_denydatareader不会在表级别工作

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

于 2011-01-03T18:12:12.413 回答
1
  • 在数据库中创建角色
  • 使用下面的代码将角色添加到每个“选择”存储过程

    使用 [YourDBNameHere] GO GRANT EXECUTE ON [TheSchemaNameHere].[YourSPNameHere] TO [YourRoleNameHere] GO

  • 将使用添加到角色

  • 删除“从所有内容中选择”的用户权限

于 2011-01-02T21:32:09.010 回答
0

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

于 2011-01-02T21:12:58.457 回答