在多个对象上授予SQL执行权限

7

大家好,我想为多个对象添加用户的执行权限。但是我似乎无法在我的代码中添加通配符。

GRANT EXECUTE ON OBJECT::dbo.CREATESERVERSESSIONS TO [domain\user];

这个可以运行,但我有很多以XU_开头的存储过程,现在我想授予执行所有以XU_开头的存储过程的权限。

GRANT EXECUTE ON OBJECT::dbo.XU_* TO [domain\user];

但是这并没有生效。我希望有人能够解决这个问题。提前感谢。


1
你不能使用通配符 - 你必须授予所有对象(或模式中的所有对象)- 或者你必须逐个列出所有对象。 - marc_s
哦,那会很糟糕...但好的,谢谢你的回答。 - Chino
1个回答

11

您不能使用通配符 - 必须授予所有对象(或模式中的所有对象) - 或者您必须逐个列出所有对象。

您可以尝试像这样让SQL Server为您生成这些语句:

SELECT
   p.Name,
   GrantCmd = 'GRANT EXECUTE ON OBJECT::' + p.name + ' TO [domain\user]'
FROM sys.procedures p
WHERE p.Name LIKE 'XU%'
这个查询将列出所有以XU开头的存储过程,并创建一个包含该存储过程的GRANT EXECUTE ON ....语句的列。
在SQL Server Management Studio中运行它,然后只需复制生成的GrantCmd列,粘贴到一个新窗口中并在那里执行即可。
如果你真的想自动化这个过程,你还可以将这个查询转换为游标,然后使用动态SQL来自动执行这些生成的GrantCmd语句....

1
简单但卓越。 - immutabl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接