数据库角色的存储过程执行权限

4
我希望能够授予db_datareader角色执行特定存储过程的权限。
如果可以的话,我该如何实现?我已经尝试在存储过程的权限选项卡中添加角色,但似乎不起作用,该角色未被接受为有效对象。 编辑
根据cainz的回答,我尝试了GRANT EXECUTE ON [SP_NAME] TO db_datareader,但是出现了以下消息:
Msg 4617, Level 16, State 1, Line 1
Cannot grant, deny or revoke permissions to or from special roles.

看起来我想做的事情似乎不可能。

2个回答

6
由于您无法修改系统角色的权限,因此无法直接实现您想要的功能。这是一件好事:您不希望您的系统角色与其他人的定义不同,因为补丁和服务包可能会产生副作用,第三方工具可能会出现问题,新开发人员也会感到(不愉快的)惊讶等。
您只需要使用脚本或其他工具在数据库中管理权限即可。显而易见的解决方案是创建自己的角色,并将数据库用户放入两个角色中;这很容易编写脚本,并且明确计划和记录安全模型是良好的做法。在您的环境中,这种方法是否合适?
(注意:可以将自己的角色添加到db_datareader中,但文档明确警告不要这样做。)

2

这似乎不是解决方案。黄色框中写着SSMS无法为系统存储过程授予权限。我的存储过程不是系统存储过程。但是在文章中却是这样写的,我尝试使用GRANT授予权限,但似乎不可能,详见我的编辑。无论如何,谢谢... - HCL
没错,你不能使用另一个角色来包装它,因为你不能将db_datareader添加到你的自定义角色中... - cairnz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接