db-role的存储过程执行权限

时间:2011-03-09 09:13:57

标签: sql-server sql-server-2008

我想赋予角色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 个答案:

答案 0 :(得分:6)

您无法直接执行所需操作,因为您无法修改系统角色的权限。这是一件好事:你不希望你的系统角色与其他人有不同的定义,因为补丁和服务包可能有副作用,第三方工具可能会破坏,新开发人员会(令人不快)感到惊讶等。

您只需使用脚本或其他工具管理数据库中的权限。显而易见的解决方案就是创建自己的角色并将数据库用户放入两个角色;这很容易编写脚本,无论如何都要明确地规划和记录您的安全模型。是否有任何具体原因导致这种情况不适合您的环境?

(注意:可以将自己的角色添加到db_datareader中,但documentation会特别警告来执行此操作。)

答案 1 :(得分:2)

这是在http://msdn.microsoft.com/en-us/library/ms345484.aspx的BOL / MSDN上记录的 - 请注意黄色框,告诉您如果这是系统过程需要做什么。