SQL 2005解決你遷移數據庫后以前用的帳戶(hù)不能使用 錯誤15023:當前數據庫中已存在用戶(hù)或角色
在使用SQL Server 2005時(shí),我們經(jīng)常會(huì )遇到一個(gè)情況:需要把一臺服務(wù)器上的數據庫轉移到另外一臺服務(wù)器上。而轉移完成后,需要給一個(gè)"登錄"關(guān)聯(lián)一個(gè)"用戶(hù)"時(shí),往往會(huì )發(fā)生錯誤:
“錯誤15023:當前數據庫中已存在用戶(hù)或角色”
這個(gè)問(wèn)題非常棘手,幾經(jīng)排常找到了原因與解決方法,因為這個(gè)問(wèn)題與解決方法均比較復雜,所以把這個(gè)過(guò)程中的一些經(jīng)驗紀錄下來(lái)與大家分享,希望能對大家以后的類(lèi)似操作有所幫助。
原因及解決辦法如下:
首先介紹一下sql server中“登錄”與“用戶(hù)”的區別,“登錄”用于用戶(hù)身份驗證,而數據庫“用戶(hù)”帳戶(hù)用于數據庫訪(fǎng)問(wèn)和權限驗證。登錄通過(guò)安全識別符 (SID) 與用戶(hù)關(guān)聯(lián)。將數據庫恢復到其他服務(wù)器時(shí),數據庫中包含一組用戶(hù)和權限,但可能沒(méi)有相應的登錄或者登錄所關(guān)聯(lián)的用戶(hù)可能不是相同的用戶(hù)。這種情況被稱(chēng)為存在“孤立用戶(hù)”。此時(shí)是不能通過(guò)新建登錄或者是對同名登錄授予對應數據庫的“用戶(hù)”權限來(lái)解決登錄問(wèn)題,因為SQL Server會(huì )報出“錯誤15023:當前數據庫中已存在用戶(hù)或角色”,為了解決這個(gè)問(wèn)題,需要調用系統存儲過(guò)程sp_change_users_login,具體用法如下:
Use netzs
go
sp_change_users_login update_one, yjsy312, yjsy312
其中netzs為存在孤立用戶(hù)的數據庫,update_one是存儲過(guò)程的參數,表示只處理一個(gè)用戶(hù),前一個(gè)yjsy312是“用戶(hù)”,后一個(gè)yjsy312是“登錄”,以上這個(gè)SQL表示將服務(wù)器登錄“yjsy312”與 netzs 數據庫用戶(hù)“yjsy312”重新連接起來(lái)。這樣就可以正常使用數據庫了