快速方法为许多存储过程授予对DB角色的Exec权限

时间:2009-07-08 21:55:36

标签: sql-server sql-server-2005 tsql ssms

考虑数据库具有SQL数据库角色或应用程序角色的场景。任务是向 n 存储过程授予执行权限。

使用SQL Management Studio时,有一个很好的屏幕可以帮助为角色的对象应用权限。

SQL Management Studio

以下是应用权限的步骤:

  • Securables 列表中选择要授予/拒绝权限的对象。
  • 导航到下面的显式权限列表。
  • 根据需要选中“授予”或“拒绝”复选框。

n 对象重复上述操作。点亮一些音乐,让自己在为100多个物品做这件事时尽情玩乐!必须有更好的方法!这是一个主要比例的点击节。

问题

使用SQL Server Management Studio 2005是否有更快的方法来执行此任务?也许是另一种GUI工具(最好是免费的)?

有关创建T-SQL脚本以自动执行此任务的建议吗?即创建一个包含所有存储过程名称的表,循环并应用exec权限?

5 个答案:

答案 0 :(得分:32)

USE database_name;
GRANT EXECUTE TO [security_account];

不要忘记括号:)

答案 1 :(得分:16)

你可以这样做,但我不完全确定这是多么安全。

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

答案 2 :(得分:11)

这应该这样做:

CREATE PROC SProcs_GrantExecute( 
    @To AS NVARCHAR(255)
    , @NameLike AS NVARCHAR(MAX)
    , @SchemaLike as NVARCHAR(MAX) = N'dbo'
    ) AS
/*
 Proc to Authorize a role for a whole bunch of SProcs at once
*/
DECLARE @sql as NVARCHAR(MAX)
SET @sql = ''

SELECT @sql = @sql + '
 GRANT EXECUTE ON OBJECT::['+ROUTINE_SCHEMA+'].['+ROUTINE_NAME+'] TO '+@To+';'
FROM INFORMATION_SCHEMA.ROUTINES
WHERE ROUTINE_NAME LIKE @NameLike
 AND ROUTINE_SCHEMA LIKE @SchemaLike

PRINT @sql
EXEC(@sql)

这是可注射的,所以请保留它仅供管理员使用。


我只想补充一点,Remus建议使用模式是首选方法,这是可行的。

答案 3 :(得分:4)

最简单的方法是:

GRANT EXECUTE ON myproc TO x

其中x =

  1. SQL用户
  2. 作用
  3. 广告组/帐户

答案 4 :(得分:2)

只需更新dbo架构并设置将此架构的EXECUTE权限添加到所需的用户/角色。