SQLServer錯誤:15023(創(chuàng)建對于用戶失?。數(shù)據(jù)庫恢復(fù)到其他服務(wù)器
背景: 最近在遷移SQLServer數(shù)據(jù)庫2019時,新建用戶成功后,做用戶映射失敗。 SQLServer 報錯:用戶、組或角色'XXX' 在當前數(shù)據(jù)庫中已存在. 錯誤:15023.

下面講一下解決的方法。
分析:
SQL Server中“登錄”與“用戶”的區(qū)別,“登錄”用于用戶身份驗證,而數(shù)據(jù)庫“用戶”帳戶用于數(shù)據(jù)庫訪問和權(quán)限驗證。登錄通過安全識別符 (SID) 與用戶關(guān)聯(lián)。
將數(shù)據(jù)庫恢復(fù)到其他服務(wù)器時,數(shù)據(jù)庫中包含一組用戶和權(quán)限,但可能沒有相應(yīng)的登錄或者登錄所關(guān)聯(lián)的用戶可能不是相同的用戶。這種情況被稱為存在“孤立用戶”。
此時是不能通過新建登錄或者是對同名登錄授予對應(yīng)數(shù)據(jù)庫的“用戶”權(quán)限來解決登錄問題,因為SQL Server會報出“錯誤15023:當前數(shù)據(jù)庫中已存在用戶或角色”
簡單理解:
數(shù)據(jù)庫備份文件中已經(jīng)包含了用戶test,現(xiàn)在還原了數(shù)據(jù)庫,然后發(fā)現(xiàn)現(xiàn)有數(shù)據(jù)庫中沒有test這個用戶,想要新建一個test用戶,作為該數(shù)據(jù)庫的owner,便會出現(xiàn)這個問題。
可以理解為登錄名和用戶是兩個不同的概念,雖然名稱相同。在新建登錄名的時候,如果不添加該數(shù)據(jù)庫映射則不會報錯。添加數(shù)據(jù)庫映射相當于給該數(shù)據(jù)庫添加一個同名用戶。
但是已經(jīng)存在了test這個用戶了,所以此時會報錯。
解決方法:
可以通過以下方法解決該問題。
1.新建一個test登錄名,但是不要添加數(shù)據(jù)庫映射。
2.使用腳本,將孤立用戶test關(guān)聯(lián)到登錄名test上:
Use Northwind Go sp_change_users_login 'update_one', 'test', 'test'
其中Northwind為存在孤立用戶的數(shù)據(jù)庫,update_one是存儲過程的參數(shù),表示只處理一個用戶,前一個test是“用戶”,后一個test是“登錄”,
以上這個SQL表示將服務(wù)器登錄“test”與 Northwind 數(shù)據(jù)庫用戶“test”重新連接起來。這樣就可以正常使用數(shù)據(jù)庫了。
到此這篇關(guān)于SQLServer錯誤:15023(創(chuàng)建對于用戶失敗)_數(shù)據(jù)庫恢復(fù)到其他服務(wù)器的文章就介紹到這了,更多相關(guān)SQLServer用戶“xx”的創(chuàng)建失敗(Microsoft.SqlServer.Smo)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SqlServer批量備份多個數(shù)據(jù)庫且刪除3天前的備份
這篇文章主要介紹了SqlServer批量備份多個數(shù)據(jù)庫且刪除3天前的備份,需要的朋友可以參考下2017-09-09
SQL Server Bulk Insert 只需要部分字段時的方法
上午在找Bulk Insert的資料看,還轉(zhuǎn)了一篇。不巧今天下午就用上了,我遇到的需求是導(dǎo)出表A中的N個字段,然后導(dǎo)入到表B的N個字段當中。2011-10-10
sqlserver 動態(tài)創(chuàng)建臨時表的語句分享
開發(fā)業(yè)務(wù)需求,需要對一個表作數(shù)據(jù)分析,由于數(shù)據(jù)量較大,而且分析時字段會隨條件相應(yīng)變化而變化2012-01-01
MS SQL Server游標(CURSOR)的學(xué)習使用
使用MS SQL Server這樣久,游標一直沒有使用過。以前都是使用WHILE循環(huán)加臨時表來實現(xiàn)。剛剛聯(lián)系個示例了解到游標概念與語法2014-06-06

