2015-07-10 136 views
0

而凝視的SqlDependency的SqlDependency權限問題

無法找到指定的用戶「所有者」我收到以下錯誤。找不到隊列 'SqlQueryNotificationService-dfb11997-c69e-4e3b-a640-29cdf4c3e9fa', 因爲它不存在或您沒有權限。無效 對象名稱 'SqlQueryNotificationService-dfb11997-c69e-4e3b-a640-29cdf4c3e9fa'。

我已經給了以下權限。不確定要賦予sql角色/用戶什麼其他權限。感謝您的時間和幫助

GRANT CREATE PROCEDURE to [SqlUser] 
GRANT CREATE QUEUE to [SqlUser] 
GRANT CREATE SERVICE to [SqlUser] 
GRANT REFERENCES on 
CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] 
to [SqlUser] 
GRANT VIEW DEFINITION TO [SqlUser] 
GRANT SELECT to [SqlUser] 
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [SqlUser] 
GRANT RECEIVE ON QueryNotificationErrorsQueue TO [SqlUser] 
GRANT ALTER ON SCHEMA::dbo TO [SqlUser] 
GRANT CONTROL ON SCHEMA::[dbo] TO [SqlUser]; 
GRANT IMPERSONATE ON USER::DBO TO [SqlUser]; 
ALTER USER [sqluser] WITH DEFAULT_SCHEMA=[SqlUser] 
GO 

回答

0

我在猜測模式[SqlUser]不存在。

  1. 如果您使用以下(你通常不應該)

    GRANT ALTER ON SCHEMA::dbo TO [SqlUser] 
    GRANT CONTROL ON SCHEMA::[dbo] TO [SqlUser]; 
    GRANT IMPERSONATE ON USER::DBO TO [SqlUser]; 
    

    那麼你並不需要:

    ALTER USER [sqluser] WITH DEFAULT_SCHEMA=[SqlUser] 
    

    ,因爲你應該保持默認模式爲dbo以便該隊列仍將在該模式下創建。

  2. 否則,你不需要在dbo贈款,你可以只使用:將仍然需要

    CREATE SCHEMA [SqlUser] AUTHORIZATION [SqlUser] 
    ALTER USER [SqlUser] WITH DEFAULT_SCHEMA = [SqlUser] 
    

所有其他的補助:

GRANT REFERENCES ON CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] TO [SqlUser]; 

    -- for Start() 
    GRANT CREATE PROCEDURE to [SqlUser]; 
    GRANT CREATE QUEUE to [SqlUser]; 
    GRANT CREATE SERVICE to [SqlUser]; 
    GRANT VIEW DEFINITION TO [SqlUser]; 

    -- for subscribe 
    GRANT SUBSCRIBE QUERY NOTIFICATIONS TO [SqlUser]; 
    GRANT RECEIVE ON QueryNotificationErrorsQueue TO [SqlUser]; 
0

對於試圖找到解決此問題的人: 我將首先檢查SqlUser是否是用於連接到應用程序的帳戶?

如果是,則其他可能的原因可能是該用戶對已激活的proc的所有者沒有IMPERSONATE權限,並且您需要授予所有者權限。

這裏是answer更詳細。