當使用者透過網域群組授予存取權限時,SQL Server 資料庫存取失敗

當使用者透過網域群組授予存取權限時,SQL Server 資料庫存取失敗

在 SQL Server 2008 R2(在 Win2003 上執行)上,我們在透過網域群組登入時遇到問題 - 向伺服器執行個體授予登入存取權限,但無法存取伺服器上的某些資料庫。

SQL Server 電腦是我們 AD 網域的成員,但不是網域控制站。我們在 SQL Server 上使用 Windows 驗證。

我們為網域群組建立 SQL Server 登入名稱。我們將使用者映射設定為該伺服器上的資料庫 XXX,啟用角色 datareader、datawriter 和 ddladmin。然後會發生什麼 - 作為這些群組成員的網域使用者可以連接到 SQL Server,但不能連接到該資料庫 XXX。如果使用者“user1”嘗試連接,他會收到錯誤“無法打開登入請求的資料庫“XXX”。登入失敗。使用者“domain\user1”登入失敗。”

如果我手動將「domain\user1」新增至資料庫 XXX 並啟用 datareader、datawriter 角色,則 user1 的連線沒有問題。

奇怪的是,user1 可以連接到同一台伺服器上的另外 2 個資料庫 - 在這裡也是透過 AD 網域群組,但是是之前建立的不同群組,而且該使用者沒有單獨設定為這些資料庫上的使用者。這些資料庫都是透過分離連接從較舊的 SQL Server 2005 安裝複製過來的,並且在 SQL-2005 上運作良好,現在在 SQL-2008 R2 伺服器上也運作良好。 (它們在資料庫屬性中顯示與有問題的資料庫 XXX 相同的使用者帳戶作為所有者。)

資料庫 XXX 是在該 R2 伺服器上建立的新資料庫,AD 網域群組也是新的。

我現在可以手動新增使用者作為解決方法,但這不會永遠有效,我需要提示這裡出了什麼問題。其他資料 - SQL Server 服務在網域管理員帳戶上執行。

我發現一篇文章描述了 SQL Server 2005 的完全相同的問題:https://connect.microsoft.com/SQLServer/feedback/details/248615/login-fails-when-user-is-granted-access-via-a-domain-group 但這是 2006 年的事情,沒有任何解決方案的線索,人們應該假設它已經修復。

答案1

順便一提:以網域管理員身分執行 SQL Server 並不是最佳實務。您可能需要考慮以非特權網域使用者身分執行 SQL。

對於可以存取透過分離/附加移動的資料庫的用戶,SID 隨資料庫一起移動。

如果我必須根據行為進行猜測,我會說 SQL 無法確定群組成員資格,或者資料庫本身的權限遺失。

您可能需要運行SELECT * FROM sys.database_principals以獲取有關特定資料庫的更多信息,並確保您的域組在那裡。

答案2

如果我必須猜測,您的用戶在添加到您用作 e SQL 登入的群組後不會登出並重新登入。在使用者登出並重新登入其工作站之前,使用者的存取權令牌不會更新為新的群組成員身分。這可以解釋為什麼舊組可以工作,但您正在測試的新組卻不能。

相關內容