1

我们正在开发一个应用程序,它以 AD 用户身份运行,连接到启用服务代理的 SQL Server 2008 数据库。

我们无法授予正确的权限以使应用程序为特定用户工作(应用程序在其操作期间创建/删除队列),除非我们使该用户成为用于服务代理应用程序的数据库的 dbo 成员。

这是我们让应用程序工作的唯一方法,将每个用户作为 dbo 的成员放入数据库吗?

在特定表上授予 CREATE QUEUE/SERVICE TO user 和 SELECT 似乎还不够。

谢谢

4

2 回答 2

1

由于 Service Broker 的分布式特性,队列和服务应该是长期存在的对象。创建和删除队列和服务的应用程序不太可能正确运行。

话虽如此,在队列上操作所需的权限是 RECEIVE (BEGIN CONVERSATION/SEND/RECEIVE)。创建队列的用户是队列所有者,并且隐含地拥有此权限。要将消息传递到目标服务,发起者服务必须具有 SEND 权限,但请注意身份是使用基于证书的Service Broker 对话安全性建立的。请注意,尽管*在 SQL Server 实例中*,Service Broker 对话安全模型将模拟熟悉的用户 ID 模型(即,建立身份不需要证书),但受EXECUTE AS context的约束。

如果您可以更具体地说明哪个操作失败,我们可以更具体地说明需要哪些权限。

于 2013-03-29T15:20:16.447 回答
0

为每个用户创建单独的架构,并使用户成为该架构的所有者。服务代理将在用户的默认模式中创建存储过程和队列。这篇关于如何设置服务代理权限的帖子可能会对您有所帮助:http: //kreelbits.blogspot.com/2014/10/microsoft-sql-useful-database-role-for.html

于 2014-10-07T19:56:53.310 回答