1. 程式人生 > >用戶、組或角色 'zgb' 在當前數據庫中已存在。 (Microsoft SQL Server,錯誤: 15023)

用戶、組或角色 'zgb' 在當前數據庫中已存在。 (Microsoft SQL Server,錯誤: 15023)

href 角色 比較 chan 通過 sql ref lac 區別

在使用SQL Server 時,我們經常會遇到一個情況:需要把一臺服務器上的數據庫轉移到另外一臺服務器上。而轉移完成後,需要給一個"登錄"關聯一個"用戶"時,往往會發生錯誤:

“錯誤15023:當前數據庫中已存在用戶或角色”

這個問題非常棘手,幾經排常找到了原因與解決方法,因為這個問題與解決方法均比較復雜,所以把這個過程中的一些經驗紀錄下來與大家分享,希望能對大家以後的類似操作有所幫助。

原因及解決辦法如下:

首先介紹一下sql server中“登錄”與“用戶”的區別,“登錄”用於用戶身份驗證,而數據庫“用戶”帳戶用於數據庫訪問和權限驗證。登錄通過安全識別符 (SID) 與用戶關聯。將數據庫恢復到其他服務器時,數據庫中包含一組用戶和權限,但可能沒有相應的登錄或者登錄所關聯的用戶可能不是相同的用戶。這種情況被稱為存在“孤立用戶”。此時是不能通過新建登錄或者是對同名登錄授予對應數據庫的“用戶”權限來解決登錄問題,因為SQL Server會報出“錯誤15023:當前數據庫中已存在用戶或角色”,為了解決這個問題,需要調用系統存儲過程sp_change_users_login,具體用法如下:

Use netzs

Go sp_change_users_login update_one, yjsy312, yjsy312

其中netzs為存在孤立用戶的數據庫,update_one是存儲過程的參數,表示只處理一個用戶,前一個yjsy312是“用戶”,後一個yjsy312是“登錄”,以上這個SQL表示將服務器登錄“yjsy312”與 netzs 數據庫用戶“yjsy312”重新連接起來。這樣就可以正常使用數據庫了

用戶、組或角色 'zgb' 在當前數據庫中已存在。 (Microsoft SQL Server,錯誤: 15023)