我有一个只有db_reader权限的db用户。 (他对所有事情都有选择。)
我有100个存储过程。我希望他能够只执行SELECT SP而不是DML。不幸的是,授予他“执行”权限 - 允许他也执行DML(INSERT / UPDATE / DELETE)。
有办法吗?
(我不想在所有SP上运行并给他特定功能的特定授权,因为我希望它也支持未来的更改和未来的SP)
答案 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权限。