3

我正在尝试为开发人员工作环境中的存储过程分配 VIEW DEFINITION 访问权限,并将下面的查询作为 Result to Text 运行,然后复制输出并作为 Result 运行到 Grid:

select 'GRANT VIEW DEFINITION ON ' + quotename(specific_schema) 
+ '.' + quotename(specific_name)
+ ' TO ' + 'TestAcct'
  from INFORMATION_SCHEMA.routines
where routine_type = 'PROCEDURE'

我遇到的问题是我必须对多台服务器上的每个数据库执行此操作。我尝试使用“sp_MSforeachdb”运行它,但是当我设置查询时,它不喜欢我的选择语句。关于如何为所有数据库格式化上述查询的任何想法,以便我可以复制输出并针对服务器而不是每个单独的数据库运行它?

4

2 回答 2

1
EXEC sp_MSforeachdb 
'SELECT ''GRANT VIEW DEFINITION ON '' + quotename(''?'') + ''.'' + quotename(specific_schema) 
+ ''.'' + quotename(specific_name)
+ '' TO '' + ''TestAcct'' AS ''?''
FROM ?.INFORMATION_SCHEMA.routines
WHERE routine_type = ''PROCEDURE'''
于 2013-01-19T09:14:29.753 回答
1

如果您只是想让您的测试帐户查看任何内容的定义,为什么不:

grant view definition to [TestAccount]

这样,当您在数据库中创建新对象时,它会保持最新状态。在我看来,更简单的解决方案效果更好。

于 2013-01-19T14:47:28.453 回答