若要登入 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 登入搭配使用。
解決孤單的使用者
若要解決孤立的使用者,請使用下列程序:
下列命令會將 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)。
在上一個步驟中執行程式代碼之後,使用者可以存取資料庫。 然後,使用者可以使用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)