癥狀
雖然術語“登入”和“使用者”經常交換使用,但它們之間有很大的不同。登入用於使用者身分識別驗證,而資料庫使用者帳戶用於資料庫訪問和許可權驗證。登入通過安全識別 符 (SID) 與使用者關聯。訪問 SQL Server 服務器需要登入。驗證特定登入是否有效過程稱為“身分識別驗證”。登入必須與 SQL Server 資料庫使用者相關聯。您使用使用者帳戶控制資料庫中執行的活動。如果資料庫中不存在針對特定登入的使用者帳戶,使用該登入的使用者即使能夠串連到 SQL Server 服務器,也無法訪問資料庫。但是,該情形的唯一例外是當資料庫包含“guest”使用者帳戶時。與使用者帳戶不關聯的登入將被映射到 guest 使用者。相反,如果存在資料庫使用者,但沒有與其關聯的登入,則該使用者將無法登入到 SQL Server 服務器中。
將資料庫恢複到其他伺服器時,資料庫中包含一組使用者和許可權,但可能沒有相應的登入或者登入所關聯的使用者可能不是相同的使用者。這種情況被稱為存在“孤立使用者”。
孤立使用者疑難解答
當您將Database Backup恢複到另一台伺服器時,可能會遇到孤立使用者的問題。以下情形說明了該問題並闡述如何加以解決。
1. |
向主要資料庫添加一個登入,並將預設資料庫指定為 Northwind:
Use master go sp_addlogin 'test', 'password', 'Northwind'
|
2. |
向剛建立的使用者授予存取權限:
Use Northwind go sp_grantdbaccess 'test'
|
3. |
備份資料庫。
BACKUP DATABASE Northwind TO DISK = 'C:/MSSQL/BACKUP/Northwind.bak'
|
4. |
將資料庫恢複到其他 SQL Server 服務器:
RESTORE DATABASE Northwind FROM DISK = 'C:/MSSQL/BACKUP/Northwind.bak'
恢複的資料庫包含名為“test”的使用者,但沒有相應的登入,這就導致“test”成為孤立使用者。 |
5. |
現在,為了檢測孤立使用者,請運行此代碼:
Use Northwind go sp_change_users_login 'report'
輸出中列出了所有登入,其中包含 Northwind 資料庫的 sysusers 系統資料表和主要資料庫的 sysxlogins 系統資料表中不匹配的條目。 |
解決孤立使用者問題的步驟
1. |
為前一步中的孤立使用者運行以下命令:
Use Northwind go sp_change_users_login 'update_one', 'test', 'test'
這樣,就將伺服器登入“test”與 Northwind 資料庫使用者“test”重新串連起來。sp_change_users_login 預存程序還可以使用“auto_fix”參數對所有孤立使用者執行更新,但不推薦這樣做,因為 SQL Server 會嘗試按名稱匹配登入和使用者。大多數情況下這都是可行的;但是,如果使用者與錯誤登入關聯,該使用者可能擁有錯誤的許可權。 |
2. |
在上一步中運行代碼後,使用者就可以訪問資料庫了。然後使用者可以使用 sp_password 預存程序更改密碼:
Use master go sp_password NULL, 'ok', 'test'
此預存程序不能用於 Microsoft Windows NT 安全帳戶。通過 Windows NT 網路帳戶串連到 SQL Server 服務器的使用者是由 Windows NT 授權的;因此,這些使用者只能在 Windows NT 中更改密碼。 只有 sysadmin 角色的成員可以更改其他使用者的登入密碼。 |