我有一个只有 db_reader 权限的 db 用户。(他对所有东西都有 SELECT )。
我有 100 个存储过程。我希望他能够只执行 SELECT SP 而不是 DML。不幸的是,授予他“执行”所有权限 - 允许他也执行 DML(插入/更新/删除)。
有办法解决吗?
(我不想在所有 SP 上运行并给他特定功能的特定授权,因为我希望它也支持未来的变化和未来的 SP)
我有一个只有 db_reader 权限的 db 用户。(他对所有东西都有 SELECT )。
我有 100 个存储过程。我希望他能够只执行 SELECT SP 而不是 DML。不幸的是,授予他“执行”所有权限 - 允许他也执行 DML(插入/更新/删除)。
有办法解决吗?
(我不想在所有 SP 上运行并给他特定功能的特定授权,因为我希望它也支持未来的变化和未来的 SP)
没有聪明的方法,不管它是否像其他评论一样痛苦
并且DENY 或 db_denydatareader不会在表级别工作
存储过程可以运行任何代码:无法区分选择过程或 DML 过程。
使用下面的代码将角色添加到每个“选择”存储过程
使用 [YourDBNameHere] GO GRANT EXECUTE ON [TheSchemaNameHere].[YourSPNameHere] TO [YourRoleNameHere] GO
将使用添加到角色
删除“从所有内容中选择”的用户权限
SQL Server 中的权限可以按架构应用。将您的 SELECT procs 放入一个单独的架构中并允许对其执行 EXEC 权限。