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

p.c*_*ell 23 t-sql sql-server ssms sql-server-2005

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

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

SQL Management Studio http://i26.tinypic.com/2r5g6c3.png

以下是应用权限的步骤:

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

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

问题:

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

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

小智 32

USE database_name;
GRANT EXECUTE TO [security_account];
Run Code Online (Sandbox Code Playgroud)

不要忘记括号:)


Jac*_*tti 17

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

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor
Run Code Online (Sandbox Code Playgroud)


RBa*_*ung 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)
Run Code Online (Sandbox Code Playgroud)

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


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


小智 5

最简单的方法是:

GRANT EXECUTE ON myproc TO x
Run Code Online (Sandbox Code Playgroud)

其中 x =

  1. SQL用户
  2. 角色
  3. AD 组/帐户