在SQL Server 2005中,有内置角色:
的db_datareader
db_datawriter权限
等
是否有任何角色可以让用户执行存储过程?
我不想使用db_owner,因为这将允许删除和更新,这是我不需要的。我需要的唯一权限是:
选择
EXECUTE
答案 0 :(得分:21)
看看这个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'
答案 1 :(得分:2)
不,我不相信存在数据库或服务器角色 - 您必须将执行权限细化地授予用户相关存储过程。
答案 2 :(得分:2)
CREATE ROLE db_executor
GRANT EXECUTE TO db_executor
现在,如果您重新启动SQL Server Management Studio,那么当您单击"用户映射"在Security->登录部分的页面中,您将看到" db_executor"出现在角色列表中。只需添加用户或您可以手动执行:
EXEC sp_addrolemember 'db_executor', 'AccountName'
答案 3 :(得分:0)
要扩展答案,一般要点是创建数据库角色并为该角色分配权限。为此,您需要一些花哨的动态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类型的用户定义函数。