SQLServer2008用戶組或角色'*****'在當前數據庫中已存在問題的解決辦法
在遷移數據庫的過程中SQLServer SDE的問題
為一個數據庫添加一個用戶時,提示以下信息:
用戶、組或角色 '*****' 在當前數據庫中已存在。 (Microsoft SQLServer, Error: 15023)
問題分析:在遷移測試平台數據庫的過程中發現,
在兩台服務器上運行的sql server服務器之間遷移數據庫的之后,
會出現一個在源服務器上可以正常的用戶在目的服務器上無法登錄的情況。
問題解決:
將數據庫恢復到其他服務器時,數據庫中包含一組用戶和權限,
但可能沒有相應的登錄或者登錄所關聯的用戶可能不是相同的用戶。
這種情況被稱為存在“孤立用戶”。
此時是不能通過新建登錄或者是對同名登錄授予對應數據庫的“用戶”權限來解決登錄問題,
因為SQLServer會報出“錯誤15023:當前數據庫中已存在用戶或角色”,
為了解決這個問題,
需要調用系統存儲過程sp_change_users_login,
具體用法如下:
1.打開SQL Server Management Studio,
右鍵選擇“數據庫”>“新建查詢”來新建一個查詢。
輸入以下sql腳本:
//=======================
Use [數據庫名]
go
sp_change_users_login 'update_one', 'AAA', 'AAA'
//========================
接着執行腳本即可。
注:其中update_one是存儲過程的參數,
表示只處理一個用戶,前一個AAA是“用戶”,
后一個AAA是“登錄”,
以上這個SQL表示將服務器登錄“AAA”與數據庫用戶“AAA”重新連接起來。
實例測試案例:
Use sde
go
sp_change_users_login 'update_one','sde','sde'
sp_change_users_login 'update_one', 'AAA', 'AAA'
就這句就搞定啦。
use cbjyq_flowdb
go
sp_change_users_login 'update_one', 'cbjyq_flowdb', 'cbjyq_flowdb';
use sde
go
sp_change_users_login 'update_one', 'cbjyq_flowdb', 'cbjyq_flowdb';
use cbjyq_flowdb
go
sp_change_users_login 'update_one', 'sde', 'sde';
--the--end!