none
MCITP系列之Lewis’s gift time – 070104- SQL Server 2005安全性的管理 RRS feed

  • 問題

  • [活動方]

    老師於課程結束當天在論壇上po出當天課程內容相關問題,在「2天內」大家皆可踴躍回答,老師會選取出最快且最完整的回答,將之標示為「正確答案」,得獎者老師會於下次課堂上公佈(當然你也可以在2天後上論壇查看自己是否有被特別標註為解答),認真的幸運兒可能就是你喔 : P

    [注意事項]

    得獎者我們會查看你登入論壇的mail並寄信與您連絡,如果您等不到聯繫也可直接上論壇告知我們。

    [Question]

                  譬如SQL SERVER 2005 中的兩個登入帳戶分別為,mary與ADA,請問當mary要

                  在執行EXECUTE AS login='ADA' 的陳述式時,發生以下的問題

     

                  訊息 15406,層級 16,狀態 1,行 1
                  無法以伺服器主體執行,因為主體 "ADA" 不存在、無法模擬這種主體、或者您沒有權限。

                  請問該如何解決?


    2007年1月7日 上午 08:55

解答

所有回覆

  • 在 EXECUTE AS <context_specification> 中指定的使用者或登入名稱,必須以主體形式分別存在於 sys.database_principals 或 sys.server_principals 中,否則 EXECUTE AS 陳述式就會失敗。此外,還必須授與主體的 IMPERSONATE 權限。除非呼叫者是資料庫擁有者,或是系統管理員 (sysadmin) 固定伺服器角色的成員,否則主體必須存在,即使當使用者透過 Windows 群組成員資格在存取資料庫或 SQL Server 的執行個體時也一樣

    所謂的「主體」,是可要求 SQL Server 資源的個體、群組和處理序。主體就像其他 SQL Server 授權模型的元件一樣,可以階層方式安排。主體的影響範圍視主體的定義範圍 (Windows、伺服器、資料庫),以及主體是否可分割或者是一個集合而定。「Windows 登入」是不可分割主體的一個範例,而「Windows 群組」則是主體為集合的範例。每個主體都有一個唯一安全性識別碼 (SID)。

    Windows 層級主體

    • Windows 網域登入
    • Windows 本機登入

    SQL Server 層級主體

    • SQL Server 登入

    資料庫層級主體

    • 資料庫使用者
    • 資料庫角色
    • 應用程式角色

    所以需要檢查帳戶 ADA 有沒有存在於 sys.database_principals 與 sys.server_principals,亦即表示說資料庫中有沒有設定這個使用者被允許存取 .

    參考資料:SQL Server Books Online, EXECUTE AS 子句說明 .

    2007年1月7日 下午 03:28
  • 需設定 ADA 的 IMPERSONATE 權限設定給 mary

    GRANT IMPERSONATE ON LOGIN::[ADA] TO [mary]

    GO

    2007年1月10日 上午 03:05