使用 .NET SqlDependency 的权限

Nic*_*ico 4 sql-server sql-server-2008-r2 service-broker

SQLDependency Notifications 使用受信任的连接以 Windows 域用户身份登录时工作正常。但不是作为 SQL 用户:

我创建了一个数据库登录名、用户和角色,如下所示:

CREATE LOGIN myLogin WITH PASSWORD = 'somePW', CHECK_POLICY = OFF;
BEGIN CREATE USER myUser FOR LOGIN myLogin;
BEGIN CREATE ROLE "myRole" AUTHORIZATION [dbo];
EXECUTE sp_addrolemember N'myRole', N'myUser';
Run Code Online (Sandbox Code Playgroud)

此外,我在此链接后添加了一些权限

--Database level permissions
GRANT CREATE PROCEDURE to [myRole];
GRANT CREATE QUEUE to [myRole];
GRANT CREATE SERVICE to [myRole];
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [myRole];
GRANT VIEW DEFINITION TO [myRole];

--Service Broker permissions
GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [myRole];
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [myRole];
Run Code Online (Sandbox Code Playgroud)

并尝试按照本文所述更改数据库所有者

这个 DBA 问题(针对同一方向)没有提供任何帮助。

还设置了 SqlDependency 执行查询和对表进行选择的权限。我使用 SSMS 验证了这一点,并使用上面创建的 user/pw-combination 执行查询。

现在,我尝试通过 .NET 使用 SqlDependency(使用上述登录名/用户建立与数据库的连接。执行 SqlDependency.Start( myConnectionString ) 会引发异常(从德语翻译):

未找到指定的用户“所有者”。无法搜索队列对象“SqlQueryNotificationService-9741490d-4f04-1f4e-AD70-b198e85b2812”,因为该对象不存在或您没有所需的权限。无效的对象名称“SqlQueryNotificationService-9741490d-4f04-1f4e-AD70-b198e85b2812”。

任何想法缺少什么?

Nic*_*ico 5

经过几天的调试,一个小小的设置就大不一样了。

如果您收到 OP 中提到的此错误,请检查所使用的 DB 角色所有者dbo在我的情况下没有设置。改变它使它起作用 - 请参阅历史评论!