當您將資料庫從一個 SQL Server 伺服器移至另一個 SQL Server 伺服器時,master 資料庫中的登入與 user 資料庫中的安全識別碼 (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 資料庫中的登入以及 user 資料庫中的使用者之間的對應關係。為了維護 user 資料庫中登入的正確權限,您必須進行對應。如果遺失此對應,則登入便會發生下列或其他的權限問題:
如果新的伺服器上沒有 SQL Server 登入,則當使用者嘗試登入時,可能會收到下列錯誤訊息:Server:Msg 18456, Level 16, State 1 (伺服器:訊息 18456,層級 16,狀態 1)
Login failed for user '%ls'. (使用者 '%ls' 登入失敗)
如果新的伺服器上有 SQL Server 登入,但 master 資料庫中的 SID 和 user 資料庫中的 SID 不相同,使用者可以成功登入 SQL Server;但是,當使用者嘗試存取資料庫時,可能會收到下列錯誤訊息:伺服器:Msg 916, Level 14, State 1, Line1 (伺服器:訊息 916,層級 14,狀態 1,行 1)
Server user '%.*ls' is not a valid user in database '%.*ls'. (伺服器使用者 '%.*ls' 並非資料庫 '%.*ls' 的有效使用者)
注意 在 SQL Server 2005 中,使用者可能會收到下列錯誤訊息:
Server user '%s' is not a valid user in database '%s'. (伺服器使用者 '%s' 並非資料庫 '%s' 的有效使用者)Add the user account into the database first. (請先將使用者帳戶新增至資料庫)
如果新的 SQL Server 伺服器上沒有標準的 SQL Server 登入,則您可以新增以 NULL 為密碼的登入。您可能必須個別變更這些登入的密碼。
如果使用者在 user 資料庫中的名稱與 sysxlogins 資料表中的名稱不同,就不可能知道與該使用者相對應的登入是哪一個。因此,在執行 sp_sidmap 預存程序之前,
請將此使用者擁有的所有物件傳送至預備資料庫。
刪除使用者後,再新增名稱正確的使用者,最後再將此使用者的所有物件傳送回來。
如果使用者沒有對應的登入,也沒有使用本機電腦名稱或網域名稱作為前置詞,您就會收到一則關於此使用者的訊息。這則訊息會指出您必須先在 Windows 層級新增此使用者,然後再以登入的形式將它新增至 SQL Server 中。完成上述作業之後,您必須再次執行sp_sidmap 預存程序。
如果使用者有使用網域名稱或本機 Windows 伺服器名稱作為前置詞,但在 sysxlogins 資料表中卻沒有對應的登入,則預存程序會試著將此使用者當做新的登入新增至 SQL Server 中。如果 Windows 使用者不存在,結果視窗中會產生一個輸出訊息,然後在首次新增 Windows 使用者後手動建立登入。