共用方式為


被遺棄使用者疑難排解 (SQL Server)

若要登入 Microsoft SQL Server 實例,主體必須具有有效的SQL Server登入。 此登入會用於驗證程式中,驗證主體是否允許連接到SQL Server的實例。 伺服器實例上的SQL Server登入會顯示在sys.server_principals目錄檢視和sys.syslogins相容性檢視中。

SQL Server登入會使用對應至SQL Server登入的資料庫使用者來存取個別資料庫。 這項規則有兩個例外狀況:

  • guest 帳戶

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

  • Microsoft Windows 群組成員資格。

    如果某個 Windows 使用者是同時也是該資料庫使用者之 Windows 群組的成員,則從該 Windows 使用者建立的 SQL Server 登入也可以進入資料庫。

有關 SQL Server 登入對應到資料庫使用者的資訊會儲存在資料庫內。 其包括資料庫使用者的名稱和對應 SQL Server 登入的 SID。 此資料庫使用者的權限使用於資料庫中的授權。

未定義對應的SQL Server登入或伺服器實例上未正確定義的資料庫使用者無法登入實例。 這類使用者就是伺服器執行個體上的資料庫 「被遺棄使用者」 (Orphaned User)。 如果卸載對應的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 權限的登入,才能夠變更其他使用者登入的密碼。 不過,只有 sysadmin 角色成員才能修改 sysadmin 角色成員的密碼。

    注意

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

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

另請參閱

CREATE USER (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)