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
以下是应用权限的步骤:
对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 =