Sql-Server

使用 .NET SqlDependency 的權限

  • September 18, 2018

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';

此外,我在此連結之後添加了一些權限

--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];

並且還嘗試按照本文所述更改數據庫所有者

這個 DBA-Question(瞄準同一方向)沒有提供任何幫助。

還設置了執行查詢和通過 SqlDependency 對錶進行選擇的權限。我使用 SSMS 驗證了這一點,並使用上面創建的使用者/密碼組合執行查詢。

現在,我嘗試通過 .NET 使用 SqlDependency(使用上述登錄名/使用者建立與 DB 的連接。執行 SqlDependency.Start(myConnectionString) 會引發異常(從德語翻譯):

未找到指定的使用者“所有者”。無法搜尋隊列對象“SqlQueryNotificationService-9741490d-4f04-1f4e-AD70-b198e85b2812”,因為該對像不存在或您沒有所需的權限。無效的對象名稱“SqlQueryNotificationService-9741490d-4f04-1f4e-AD70-b198e85b2812”。

任何想法缺少什麼?

經過幾天的調試,一個小小的設置就改變了一切。

如果您收到 OP 中提到的此錯誤,請檢查所使用的 DB-role 的所有者dbo在我的情況下,它沒有設置。改變它使它起作用 - 請參閱歷史評論!

只是為了詳細說明 Nico 的答案,這個查詢修復了錯誤:

EXEC sp_changedbowner 'sa'

錯誤消息是

TableDependency.SqlClient.Exceptions.UserWithNoPermissionException: User without permissions.

引用自:https://dba.stackexchange.com/questions/47567