考虑数据库具有SQL数据库角色或应用程序角色的场景。任务是向 n 存储过程授予执行权限。
使用SQL Management Studio时,有一个很好的屏幕可以帮助为角色的对象应用权限。
以下是应用权限的步骤:
对 n 对象重复上述操作。点亮一些音乐,让自己在为100多个物品做这件事时尽情玩乐!必须有更好的方法!这是一个主要比例的点击节。
问题:
使用SQL Server Management Studio 2005是否有更快的方法来执行此任务?也许是另一种GUI工具(最好是免费的)?
有关创建T-SQL脚本以自动执行此任务的建议吗?即创建一个包含所有存储过程名称的表,循环并应用exec权限?
答案 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 =
答案 4 :(得分:2)
只需更新dbo架构并设置将此架构的EXECUTE权限添加到所需的用户/角色。