SQL Server:在没有grant dml的情况下授予执行权限

时间:2011-01-02 20:34:29

标签: sql-server-2008 database-permissions

我有一个只有db_reader权限的db用户。 (他对所有事情都有选择。)

我有100个存储过程。我希望他能够只执行SELECT SP而不是DML。不幸的是,授予他“执行”权限 - 允许他也执行DML(INSERT / UPDATE / DELETE)。

有办法吗?

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

3 个答案:

答案 0 :(得分:1)

  • 在数据库中创建角色
  • 使用以下代码添加角色 每个“选择”存储 程序

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

  • 将用途添加到角色

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

答案 1 :(得分:1)

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

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

并且DENY or db_denydatareader无法在表级

工作

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

答案 2 :(得分:0)

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