SQL Server 2005 中的内置数据库角色允许执行存储过程?
Posted
技术标签:
【中文标题】SQL Server 2005 中的内置数据库角色允许执行存储过程?【英文标题】:Built-in database role in SQL Server 2005 to permit execution of stored procedures? 【发布时间】:2011-01-18 21:17:48 【问题描述】:在 SQL Server 2005 中,有内置角色:
db_datareader
db_datawriter
等等
是否有任何角色可以让用户执行存储过程?
我不想使用 db_owner,因为这将允许我不需要的删除和更新。我需要的唯一权限是:
选择
执行
【问题讨论】:
【参考方案1】:不,我不认为存在数据库或服务器角色 - 您必须将相关存储过程的执行权限精细地授予用户。
【讨论】:
或者您可以将用户放入角色并将每个 proc 的权限授予角色而不是 1000 个不同的用户。【参考方案2】:看看这个article。它可能会为您提供一个有趣的想法来快速完成此操作。
那篇文章中使用的代码:
/* Create a new role for executing stored procedures */
CREATE ROLE db_executor
/* Grant stored procedure execute rights to the role */
GRANT EXECUTE TO db_executor
/* Add a user to the db_executor role */
EXEC sp_addrolemember 'db_executor', 'AccountName'
【讨论】:
但是@Peter 所说的基本上是正确的...您需要授予用户名执行权限...此站点将为您提供快速的方法。【参考方案3】:为了扩展答案,一般要点是创建一个数据库角色并为该角色分配权限。为此,您需要一些花哨的动态 SQL,例如:
Set @Routines = Cursor Fast_Forward For
Select ROUTINE_SCHEMA + '.' + ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE
From INFORMATION_SCHEMA.ROUTINES
Where ROUTINE_NAME NOT LIKE 'dt_%'
Or ROUTINE_TYPE = 'FUNCTION'
Open @Routines
Fetch Next From @Routines Into @Procname, @RoutineType, @DataType
While @@Fetch_Status = 0
Begin
Set @Msg = 'Procname: ' + @Procname + ', Type: ' + @RoutineType + ', DataType: ' + Coalesce(@DataType,'')
Raiserror(@Msg, 10, 1) WITH NOWAIT
If @RoutineType = 'FUNCTION' And @DataType = 'TABLE'
Set @SQL = 'GRANT SELECT ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader'
Else
Set @SQL = 'GRANT EXECUTE ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader'
exec(@SQL)
Fetch Next From @Routines Into @Procname, @RoutineType, @DataType
End
Close @Routines
Deallocate @Routines
此代码将 EXECUTE 授予存储过程和标量函数,并将 SELECT 授予返回 TABLE 类型的用户定义函数。
【讨论】:
【参考方案4】:CREATE ROLE db_executor
GRANT EXECUTE TO db_executor
现在,如果您重新启动 SQL Server Management Studio,当您单击“安全”->“登录”部分中的“用户映射”页面时,您将看到“db_executor”出现在角色列表中。只需添加用户,也可以手动添加:
EXEC sp_addrolemember 'db_executor', 'AccountName'
【讨论】:
您无需重新启动 SSMS 即可看到新角色。只需右键单击 Security->Server Roles 容器文件夹并选择“刷新”以上是关于SQL Server 2005 中的内置数据库角色允许执行存储过程?的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 2005的服务器角色(public)的问题