大家好我想为多个对象添加执行权限。但我似乎无法在我的代码中添加通配符。
GRANT EXECUTE ON OBJECT::dbo.CREATESERVERSESSIONS TO [domain\user];
这有效但我有很多以XU_开头的存储过程现在我希望在所有以XU __开头的存储过程上执行grant
GRANT EXECUTE ON OBJECT::dbo.XU_* TO [domain\user];
但这不起作用。我希望有人知道解决这个问题。提前谢谢。
答案 0 :(得分:7)
您不能使用通配符 - 您必须授予所有对象(或架构中的所有对象) - 或者您必须逐个列出所有对象。
您可能会这样做 - 让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
语句....