孤立帳戶的產(chǎn)生一般是一下兩種:
1.將備份的數(shù)據(jù)庫在其它機器上還原;
2.重裝系統(tǒng)或SQL SERVER之后只還原了用戶庫
解決方法是使用sp_change_users_login來修復。
sp_change_users_login的用法有三種
用法1:
exec sp_change_users_login 'REPORT'
列出當前數(shù)據(jù)庫的孤立用戶
用法2:
exec sp_change_users_login 'AUTO_FIX','用戶名'
可以自動將用戶名所對應的同名登錄添加到syslogins中
用法3:
exec sp_change_users_login 'UPDATE_ONE','用戶名','登錄名'
將用戶名映射為指定的登錄名。
SQL孤立用戶解決方案
當您將數(shù)據(jù)庫備份恢復到另一臺服務器時,可能會遇到孤立用戶的問題。SQL Server 聯(lián)機叢書中的孤立用戶疑難解答主題中沒有講述解決此問題的具體步驟。
雖然術(shù)語“登錄”和“用戶”經(jīng)常交換使用,但它們之間有很大的不同。登錄用于用戶身份驗證,而數(shù)據(jù)庫用戶帳戶用于數(shù)據(jù)庫訪問和權(quán)限驗證。登錄通過安全識別符 (SID) 與用戶關(guān)聯(lián)。訪問 SQL Server 服務器需要登錄。驗證特定登錄是否有效的過程稱為“身份驗證”。登錄必須與 SQL Server 數(shù)據(jù)庫用戶相關(guān)聯(lián)。您使用用戶帳戶控制數(shù)據(jù)庫中執(zhí)行的活動。如果數(shù)據(jù)庫中不存在針對特定登錄的用戶帳戶,使用該登錄的用戶即使能夠連接到 SQL Server 服務器,也無法訪問數(shù)據(jù)庫。但是,該情形的唯一例外是當數(shù)據(jù)庫包含“guest”用戶帳戶時。與用戶帳戶不關(guān)聯(lián)的登錄將被映射到 guest 用戶。相反,如果存在數(shù)據(jù)庫用戶,但沒有與其關(guān)聯(lián)的登錄,則該用戶將無法登錄到 SQL Server 服務器中。
將數(shù)據(jù)庫恢復到其他服務器時,數(shù)據(jù)庫中包含一組用戶和權(quán)限,但可能沒有相應的登錄或者登錄所關(guān)聯(lián)的用戶可能不是相同的用戶。這種情況被稱為存在“孤立用戶”。
孤立用戶疑難解答
當您將數(shù)據(jù)庫備份恢復到另一臺服務器時,可能會遇到孤立用戶的問題。以下情形說明了該問題并闡述如何加以解決。
1. 向主數(shù)據(jù)庫添加一個登錄,并將默認數(shù)據(jù)庫指定為 Northwind: Use master go sp_addlogin 'test', 'password', 'Northwind'
2. 向剛創(chuàng)建的用戶授予訪問權(quán)限: Use Northwind go sp_grantdbaccess 'test'
3. 備份數(shù)據(jù)庫。 BACKUP DATABASE Northwind
TO DISK = 'C:MSSQLBACKUPNorthwind.bak'
4. 將數(shù)據(jù)庫恢復到其他 SQL Server 服務器: RESTORE DATABASE Northwind
FROM DISK = 'C:MSSQLBACKUPNorthwind.bak'
恢復的數(shù)據(jù)庫包含名為“test”的用戶,但沒有相應的登錄,這就導致“test”成為孤立用戶。
5. 現(xiàn)在,為了檢測孤立用戶,請運行此代碼: Use Northwind go sp_change_users_login 'report'
輸出中列出了所有登錄,其中包含 Northwind 數(shù)據(jù)庫的 sysusers 系統(tǒng)表和主數(shù)據(jù)庫的 sysxlogins 系統(tǒng)表中不匹配的條目。
北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |