2011-03-09 70 views
3

我想授予角色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. 

这似乎是不可能的什么我想做的事。

回答

5

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

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

(注:这是可以添加您自己的角色进入的db_datareader,但documentation特别警告做到这一点。)

1

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

+0

这似乎并没有被解决。在黄色框中写入SSMS不能授予系统存储过程的权限。我的存储过程不是系统存储过程。但是这样的文章写在文章中,我试图用GRANT给予许可,但是这似乎是不可能的,请参阅我的编辑。无论如何感谢... – HCL 2011-03-09 09:30:28

+0

正确的,你不能用另一个角色包装它,因为你不能将db_datareader添加到你的自定义角色中...... – cairnz 2011-03-09 09:30:54

相关问题