授予对所有服务代理对象的权限

Grant permissions on all service broker objects

有谁知道如何授予用户对 MS SQL 服务器数据库中所有 Service Broker 对象(即合同、消息类型、远程绑定、路由或服务)的权限?

我知道可以对对象逐一授予权限。但是我们有几十个,所以想看看有没有什么聪明的方法可以减少麻烦。

我们不想使用 "sysadmin",因为它太多了。

如有任何想法,我们将不胜感激。

简而言之,没有像 db_datareader 这样的内置角色授予对所有服务代理对象的所有权限。我的建议是创建一个数据库角色,授予它必要的权限,然后将适当的用户放入角色中。为了 bootstrap 这个,你可以在系统视图上写一些动态 SQL 像'sys.service_queues`来为你生成授权声明。例如:

select concat('grant receive on ', 
   quotename(schema_name(schema_id)), 
   '.', 
   quotename(object_name(object_id)), 
   ' to [YourRole]'
)
from sys.service_queues;

展望未来,有纪律在创建时授予适当的权限。