SQL Server 2005中的内置数据库角色允许执行存储过程?

问题描述:

在SQL Server 2005中,有建于角色:SQL Server 2005中的内置数据库角色允许执行存储过程?

的db_datareader

db_datawriter权限

是否有让用户执行存储过程的任何作用?

我不想使用db_owner,因为这将允许删除和更新,我不需要。我唯一需要的权限是:

选择

EXECUTE

看看这个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' 
+0

但@Peter所说的基本上是正确的......您将需要授予用户名执行权限......本网站将为您提供一种快捷方式。 – Aaron 2010-02-19 17:22:17

+0

这是一个可爱的解决方案!你有我的投票... – 2010-02-19 17:23:03

不,我不相信有一个数据库或服务器角色 - 你必须精细地授予执行权限用户为相关的存储过程。

+1

或者你可以把用户分为角色和授予的权限给每个PROC的作用,而不是1000个不同的充用户。 – HLGEM 2010-02-19 22:40:39

要对答案扩大,一般的主旨是创建一个数据库角色和权限分配给该角色。为了做到这一点,你需要一些花哨的动态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

此代码将授予执行存储过程和标量函数并选择返回表类型的用户定义的函数。

CREATE ROLE db_executor 

GRANT EXECUTE TO db_executor 

现在,如果重新启动SQL Server Management Studio中,当您单击安全 - “用户映射”页>登录部分,你会看到“db_executor”出现在角色列表。只需添加用户,也可以手动做到这一点:

EXEC sp_addrolemember 'db_executor', 'AccountName' 
+1

你不需要重新启动SSMS来查看新的角色。只需右键单击安全性 - >服务器角色容器文件夹,然后选择“刷新” – shahzbot 2015-01-02 14:41:36