Sql-Server
使用 .NET SqlDependency 的權限
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.