如何解決在運行 SQL Server 的伺服器之間移動資料庫時的許可權問題

來源:互聯網
上載者:User
概要

本文描述如何映射標準登入和整合登入來解決在運行 SQL Server 的伺服器之間移動資料庫時的許可權問題。

更多資訊

當您將資料庫從一個運行 SQL Server 的伺服器移到另一個運行 SQL Server 的伺服器時,master 資料庫中登入的安全標識號 (SID) 與使用者資料庫中使用者的 SID 可能不匹配。預設情況下,SQL Server 7.0、SQL Server 2000 和 SQL Server 2005 會提供 sp_change_users_login 系統預存程序來映射這些不匹配的使用者。但是,sp_change_users_login 預存程序僅能用於映射標準的 SQL Server 登入,而且需要一次對一個使用者執行這些映射。有關 sp_change_users_login 預存程序的更多資訊,請參閱 SQL Server 7.0、SQL Server 2000 和 SQL Server 2005 聯機叢書中的“sp_change_users_login”主題。
在 SQL Server 7.0 或更高版本中,您可以使用 SID 來維護 master 資料庫中的登入和使用者資料庫中的使用者之間的映射。此映射是維護使用者資料庫中登入的正確許可權所必需的。如果丟失此映射,登入將發生許可權問題,其中包括但不限於以下問題:

•如果新伺服器上不存在 SQL Server 登入,而使用者嘗試登入,該使用者可能會收到以下錯誤訊息:

Server:Msg 18456, Level 16, State 1
Login failed for user '%ls'.

•如果新伺服器上存在 SQL Server 登入,但 master 資料庫中的 SID 與使用者資料庫中的 SID 不相同,則使用者可以成功登入到 SQL Server;但是,當使用者嘗試訪問該資料庫時,可能會收到以下錯誤訊息:

Server:Msg 916, Level 14, State 1, Line1
Server user '%.*ls' is not a valid user in database '%.*ls'.

注意:在 SQL Server 2005 中,使用者可能會收到以下錯誤訊息:

伺服器使用者“%s”不是資料庫“%s”中的有效使用者。請先將該使用者帳戶添加到資料庫中。

有關 SQL Server 7.0 安全模型的更多資訊,請參閱“Microsoft SQL Server 7.0 Security”(Microsoft SQL Server 7.0 安全性)白皮書。要查看此白皮書,請訪問下面的 Microsoft 網站:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql7/html/sql7security.asp

(http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsql7/html/sql7security.asp)

有關 SQL Server 2000 安全模型的更多資訊,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:

322712 (http://support.microsoft.com/kb/322712/) Microsoft SQL Server 2000 S322712 安全功能和最佳做法

要下載 Mapsids.exe 檔,請使用下面的下載連結:

Mapsids.exe
http://download.microsoft.com/download/sqlsvr2000/utility/5.0/win98me/en-us/Mapsids.exe

(http://download.microsoft.com/download/sqlsvr2000/utility/5.0/win98me/en-us/mapsids.exe)

限制

•如果 sysusers 表中有使用者沒有以電腦名稱或擁有對象的網域名稱作為首碼,而應用程式中使用包含兩個部分的名稱 username.objectname 引用了這些對象,則應用程式可能會中斷,因為當 sp_sidmap 預存程序在 sysxlogins 表中出現時,它會以電腦名稱或網域名稱作為首碼重新命名這些使用者。要解決此問題,請在 sp_sidmap 預存程序完成後,將 sysusers 表中受影響的使用者重新命名為它們原來的名稱,或者與您的主要支援供應商聯絡。

•本文未涉及別名。您必須手動管理別名。

•如果新的 SQL Server 服務器上不存在標準的 SQL Server 登入,則會添加密碼為空白的登入。因此,您可能需要更改這些登入的密碼。

•如果使用者是在使用者資料庫中建立的,而且該使用者的名稱不同於 sysxlogins 表中顯示的名稱,則無法知道該使用者的相應登入。因此,在執行 sp_sidmap 預存程序之前:

1.將該使用者擁有的所有對象轉移到一個臨時資料庫。

2.刪除該使用者,添加具有正確名稱的使用者,然後再移回該使用者的所有對象。

•如果使用者不具有對應的登入,而且也沒有以本機電腦名或網域名稱作為首碼,您將收到有關該使用者的一則訊息。該訊息指出,需要首先在 Windows 層級添加該使用者,再將其作為登入添加到 SQL Server;然後,您必須要再次執行 sp_sidmap 預存程序。

•如果使用者以網域名稱或本地 Windows 伺服器名作為首碼,但 sysxlogins 表中不存在相應的登入,該預存程序會嘗試將其作為新登入添加到 SQL Server。如果該 Windows 使用者不存在,則將在結果視窗中產生一條輸出訊息,然後在它首次添加該 Windows 使用者後手動建立登入。

•如果 sysusers 表中的某一使用者有多個登入,您將在結果檔案中看到一則輸出訊息,它會列出具有相同使用者名稱的所有登入。此時,您必須手動幹預,以確保該使用者僅對應於一個登入。
樣本:如果 sysusers 表中有一個名稱為“johndoe”的使用者,而 sysxlogins 表中有名為諸如“Test\johndoe”和“Test2\johndoe”的登入,則當運行預存程序時,您將收到一條訊息,指出其中一個使用者具有多個登入,系統管理員必須從中選擇一個。只有在這種情況下,您才必須運行本文提供的第二個預存程序 sp_prefix_sysusersname。另外,Readme.txt 檔案中也詳細介紹了這種情況。

映射標準登入和整合登入

當您將資料庫從一個運行 SQL Server 的伺服器移到另一個運行 SQL Server 的伺服器後,請按照下列步驟操作,以盡量減少使用者幹預:

1.確保對於資料庫的 sysusers 表中的每一個使用者,master 資料庫的 sysxlogins 表中都有一個登入。
注意:要添加標準 SQL Server 登入,請參閱 SQL Server 聯機叢書中的“sp_addlogin”主題。要添加整合的 SQL Server 登入,請參閱 SQL Server 聯機叢書中的“sp_grantlogin”主題。

2.下載 MapSids.exe 檔,然後解壓縮 Sp_sidmap.sql 和 Readme.txt 檔案。

3.以系統管理員身份登入到運行 SQL Server 的伺服器,然後在使用者資料庫中運行 Sp_sidmap.sql 檔案。運行 Sp_sidmap.sql 檔案會建立兩個預存程序:sp_sidmapsp_prefix_sysusersname

4.確保除了運行這些預存程序的使用者之外,沒有其他任何使用者訪問該資料庫。

5.確保“查詢分析器”視窗以文字格式設定(而不是網格格式)顯示結果。為此,請按 Ctrl^T 鍵,或者單擊查詢,然後單擊“文本顯示結果”。這是非常重要的,它使您可以在一個視窗中查看結果和資訊性訊息,並將輸出儲存到文字檔中。稍後可能需要使用該檔案來解析某些映射。

6.由於您無法驗證參數是否已正確傳遞,因此請確保將參數正確地傳遞到 sp_sidmap 預存程序:

EXEC sp_SidMap @old_domain = old_domain_name,@new_domain = new_domain_name,@old_server = old_server_name,@new_server = new_server_name

適當地替換新舊網域名稱和伺服器名的值。

7.將結果儲存在一個檔案中,然後按照 Readme.txt 檔案中提供的指導操作。
注意:當您運行這些預存程序時,資料庫中唯一變化的表是 sysusers 表。如果您需要返回到開始時的狀態,請從備份中還原資料庫或者重新附加資料庫。

參考

有關更多資訊,請單擊下面的文章編號,以查看 Microsoft 知識庫中相應的文章:

274188 (http://support.microsoft.com/kb/274188/) PRB:聯機叢書中的“孤立使用者疑難解答”主題不完整

246133 (http://support.microsoft.com/kb/246133/) 如何在 SQL Server 執行個體之間傳輸登入和密碼

168001 (http://support.microsoft.com/kb/168001/) 還原資料庫後資料庫上的使用者登入和許可權可能不正確

298897 (http://support.microsoft.com/kb/298897/) 樣本:Mapsids.exe 有助於在移動資料庫時在使用者資料庫和 master 資料庫之間映射 SID

from: http://support.microsoft.com/kb/240872/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.