您目前已離線,請等候您的網際網路重新連線

PRB:線上叢書的疑難排解孤兒使用者主題不完整

本文曾發行於 CHT274188
BUG #: 58200 (SQLBUG_70)
BUG #: 235230 (SHILOH)
徵狀
當您將資料庫備份還原到另一台伺服器上時,可能會遇到孤兒使用者的問題。《SQL Server 線上叢書》中的〈疑難排解孤兒使用者〉主題並未列出排解這個問題的確實步驟。

本文說明如何排解孤兒使用者的問題。
狀況說明
Microsoft 已確認本篇文件開頭所列產品確實有上述問題。
其他相關資訊
雖然登入和使用者這兩個詞彙經常混用,但它們的意思其實非常不同。登入是用來進行使用者驗證,而資料庫使用者帳戶則用於資料庫存取和使用權限驗證。登入與使用者之間會以安全識別碼 (SID) 來建立關聯。要存取 SQL Server 伺服器則需要使用登入。驗證特定登入是否有效的程序稱為「驗證」,而這個登入必須與某一 SQL Server 資料庫使用者相關。您使用使用者帳戶來控制在資料庫中執行的活動,如果某特定登入在資料庫中沒有使用者帳戶,則使用該登入的使用者便無法存取該資料庫,就算該使用者可以連接到該 SQL Server 伺服器,也是如此。這種情況的唯一例外是當資料庫包含「guest」使用者帳戶時,沒有相關使用者帳戶的登入,會被對應到 guest 使用者;相反地,如果有資料庫使用者,但沒有相關的登入,則使用者也無法登入 SQL Server 伺服器。

當資料庫還原到不同的伺服器上時,它會包含一組使用者和使用權限,但可能沒有任何相關的登入或登入可能不是與同樣的使用者相關。這種情況被稱之為製造了「孤兒使用者」。

孤兒使用者疑難排解

將資料庫備份還原到另一個伺服器上時,可能會遭遇孤兒使用者的問題。下列情況說明了這個問題,並顯示該如何加以解決。
  1. 在主要資料庫中新增一個登入,並將預設資料庫指定為 Northwind:
    Use master go sp_addlogin 'test', 'password', 'Northwind'
  2. 將存取權授與您剛建立的使用者:
    Use Northwind go sp_grantdbaccess 'test'
  3. 將資料庫備份。
    BACKUP DATABASE NorthwindTO DISK = 'C:\MSSQL\BACKUP\Northwind.bak'
  4. 將資料庫還原到不同的 SQL Server 伺服器上:
    RESTORE DATABASE NorthwindFROM DISK = 'C:\MSSQL\BACKUP\Northwind.bak'
    還原的資料庫包含名為「test」的使用者,但沒有相對應的登入,導致「test」成為孤兒。
  5. 現在,請執行下列程式碼來偵測孤兒使用者:
    Use Northwind go sp_change_users_login 'report'
    輸出會列出所有的登入,顯示在 Northwind 資料庫sysusers系統資料表和主要資料庫sysxlogins系統資料表的項目之間,有不相符的狀況。

解決孤兒使用者的步驟:

  1. 請為前述步驟所產生的孤兒使用者執行下列命令:
    Use Northwindgosp_change_users_login 'update_one', 'test', 'test'
    這會重新連結伺服器的登入「測試」與 Northwind 資料庫的使用者「測試」。sp_change_users_login預存程序也可用 auto_fix 參數來執行所有孤兒使用者的更新作業,但我們並不建議這麼做,因為 SQL Server 會以名稱來比對登入和使用者。這種做法在大多數的情況下會奏效,不過,如果與使用者相關聯的登入是錯誤的,則使用者可能會有錯誤的使用權限。
  2. 在執行過前述步驟中的程式碼後,使用者便可存取資料庫。稍後使用者便可用sp_password預存程序來變更密碼:
    Use master gosp_password NULL, 'ok', 'test'
    這個預存程序不能用於 Microsoft Windows NT 安全性帳戶。透過其 Windows NT 網路帳戶連結到 SQL Server 伺服器的使用者,會由 Windows NT 來驗證;因此它們的密碼只能由 Windows NT 來變更。

    只有 sysadmin 角色的成員可以變更另一個使用者登入的密碼。
参考
如需如何在伺服器之間移動資料庫時解決使用權限問題的詳細資訊,請按一下下面的文件編號,檢視「Microsoft 知識庫」中的下列文件:
240872 INF:如何解決在 SQL Server 之間移動資料庫的權限問題
本文件是根據 Microsoft Knowledge Base 文件編號 Q274188 翻譯的。若要參考原始英文文件內容,請至以下網址:

Troubleshooting Orphaned User
內容

文章識別碼:274188 - 最後檢閱時間:03/11/2004 16:32:32 - 修訂: 2.1

  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2000 Standard Edition
  • kbcodesnippet kbpending kbprb KB274188
意見反應