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

SQL Server 2005的服务器角色(public)的问题

使用 SQL Server 2005 通过 LDAP 访问 Active Directory 角色成员资格

SQL Server 2005 - 用户权限

sql server 2005中的自动数据库备份

SQL Server 2005 中的数据聚合