共用方式為


針對孤兒使用者進行疑難排解(SQL Server)

若要登入 Microsoft SQL Server 的實例,主體必須具有有效的 SQL Server 登入。 此登入會用於身份驗證過程,以確認主體是否獲准連線到 SQL Server 的實例。 伺服器實例上的 SQL Server 登入會顯示在 sys.server_principals 目錄檢視和 sys.syslogins 相容性檢視中。

SQL Server 登入會使用對應至 SQL Server 登入的資料庫用戶來存取個別資料庫。 此規則有兩個例外:

  • 來賓帳戶。

    這個帳戶在資料庫中啟用後,可以讓未對應至資料庫使用者的 SQL Server 登入,以來賓使用者身分進入資料庫。

  • Microsoft Windows 群組成員資格。

    如果 Windows 使用者是也是資料庫中使用者的 Windows 群組成員,則從 Windows 使用者建立的 SQL Server 登入可以輸入資料庫。

SQL Server 登入與資料庫使用者的映射資訊會儲存在資料庫中。 它包含資料庫用戶的名稱,以及對應 SQL Server 登入的 SID。 此資料庫用戶的許可權會用於資料庫中的授權。

某資料庫使用者若在伺服器實例上對應的 SQL Server 登入未定義或定義錯誤,將無法登入該伺服器實例。 這類使用者據說是該伺服器實例上資料庫的 孤立使用者 。 如果卸除對應的 SQL Server 登入,資料庫使用者可能會變得孤立。 此外,資料庫用戶可能在資料庫還原或附加到不同的 SQL Server 實例後成為孤立用戶。 如果資料庫用戶對應到新伺服器實例中不存在的 SID,就可能發生孤立。

備註

除非在該資料庫中啟用 來賓 ,否則 SQL Server 登入無法存取缺少對應資料庫用戶的資料庫。 如需建立資料庫使用者帳戶的詳細資訊,請參閱 CREATE USER (Transact-SQL)

偵測孤立的使用者

若要偵測孤立的使用者,請執行下列 Transact-SQL 語句:

USE <database_name>;  
GO;   
sp_change_users_login @Action='Report';  
GO;  

輸出會列出目前資料庫中未連結至任何 SQL Server 登入的使用者和對應的安全性識別碼 (SID)。 如需詳細資訊,請參閱 sp_change_users_login (Transact-SQL)。

備註

sp_change_users_login 無法與從 Windows 建立的 SQL Server 登入搭配使用。

解決孤單的使用者

若要解決孤立的使用者,請使用下列程序:

  1. 下列命令會將 login_name> 所<指定的伺服器登入帳戶與database_user>所<指定的資料庫使用者重新連結。

    USE <database_name>;  
    GO  
    sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', @LoginName='<login_name>';  
    GO  
    
    

    如需詳細資訊,請參閱 sp_change_users_login (Transact-SQL)。

  2. 在上一個步驟中執行程式代碼之後,使用者可以存取資料庫。 然後,使用者可以使用sp_password預存程式來改變login_name>登入賬戶的密碼<,如下所示:

    USE master   
    GO  
    sp_password @old=NULL, @new='password', @loginame='<login_name>';  
    GO  
    

    這很重要

    只有具有 ALTER ANY LOGIN 許可權的登入才能變更其他使用者登入的密碼。 不過,只有 系統管理員 角色的成員可以修改 系統管理員 角色成員的密碼。

    備註

    sp_password 無法用於Microsoft Windows 帳戶。 透過其 Windows 網路帳戶連線到 SQL Server 實例的使用者會由 Windows 進行驗證;因此,其密碼只能在 Windows 中變更。

    如需詳細資訊,請參閱 sp_password (Transact-SQL)

另請參閱

建立用戶(Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL)
sys.sysusers (Transact-SQL)
sys.syslogins (Transact-SQL)