共用方式為


sp_change_users_login (Transact-SQL)

適用於:SQL Server

將現有的資料庫用戶對應至 SQL Server 登入。

重要

SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 ALTER USER

Transact-SQL 語法慣例

語法

sp_change_users_login
    [ @Action = ] 'Action'
    [ , [ @UserNamePattern = ] N'UserNamePattern' ]
    [ , [ @LoginName = ] N'LoginName' ]
    [ , [ @Password = ] N'Password' ]
[ ; ]

引數

[ @Action = ] '動作'

描述要執行之預存程序的動作。 @Action為 varchar(10),沒有預設值,而且可以有下列其中一個值。

Description
Auto_Fix 將目前資料庫中系統目錄檢視中的 sys.database_principals 用戶項目連結至相同名稱的 SQL Server 登入。 如果具有相同名稱的登入不存在,則會建立一個登入。 檢查 語句的結果 Auto_Fix ,以確認確實做了正確的連結。 避免在安全性敏感性情況下使用 Auto_Fix

當您使用 Auto_Fix時,如果登入不存在,則必須指定 @UserNamePattern@Password ,否則您必須指定 @UserNamePattern忽略@Password @LoginName必須是 NULL @UserNamePattern必須是目前資料庫中的有效使用者。 登入不能有另一個用戶對應至該登入。
Report 列出目前資料庫中未連結至任何登入的用戶和對應的安全性標識碼 (SID)。 必須指定@UserNamePattern、@LoginName@PasswordNULL

若要使用系統數據表將報表選項取代為查詢,請將 中的 sys.server_principals 專案與 中的 sys.database_principals專案進行比較。
Update_One 將目前資料庫中指定的 @UserNamePattern 連結至現有的 SQL Server @LoginName必須指定@UserNamePattern@LoginName 必須NULL或未指定@Password。

[ @UserNamePattern = ] N'UserNamePattern'

目前資料庫中用戶的名稱。 @UserNamePattern為 sysnameNULL

[ @LoginName = ] N'LoginName'

SQL Server 登入的名稱。 @LoginName為 sysnameNULL

[ @Password = ] N'密碼'

指派給新 SQL Server 登入的密碼,該登入是藉由指定 Auto_Fix所建立。 @Password是 sysnameNULL。 如果相符的登入已經存在,則會對應使用者和登入,並 忽略@Password 。 如果相符的登入不存在,請建立新的 SQL Server 登入,sp_change_users_login並將@Password指派為新登入的密碼。

重要

律使用強密碼

傳回碼值

0 (成功) 或 1 (失敗)。

結果集

資料行名稱 資料類型 Description
UserName sysname 資料庫用戶名稱。
UserSID varbinary(85) 使用者的安全性識別碼。

備註

使用 sp_change_users_login 連結目前資料庫中的資料庫使用者與 SQL Server 登入。 如果使用者的登入變更,請使用 sp_change_users_login 將用戶連結至新的登入,而不會失去用戶權力。 新的 @LoginName 不能是 sa,而且 @UserNamePattern 不能是 dboguestINFORMATION_SCHEMA 使用者。

sp_change_users_login 無法用來將資料庫用戶對應至 Windows 層級主體、憑證或非對稱密鑰。

sp_change_users_login 無法與從 Windows 主體建立的 SQL Server 登入或使用 建立的使用者搭配使用 CREATE USER WITHOUT LOGIN

sp_change_users_login 無法在使用者定義的交易內執行。

權限

需要 db_owner 固定資料庫角色中的成員資格。 只有 sysadmin 固定伺服器角色的成員可以指定 Auto_Fix 選項。

範例

本文 Transact-SQL 程式碼範例使用 AdventureWorks2022AdventureWorksDW2022 範例資料庫,從 Microsoft SQL Server Samples 和 Community Projects (Microsoft SQL Server 範例和社群專案)首頁即可下載。

A. 顯示目前使用者登入對應的報告

下列範例會產生目前資料庫中使用者及其安全性標識碼 (SID) 的報表。

EXEC sp_change_users_login 'Report';

B. 將資料庫用戶對應至新的 SQL Server 登入

在下列範例中,資料庫使用者與新的 SQL Server 登入相關聯。 第一次對應至另一個登入的資料庫使用者 MB-Sales會重新對應至登入 MaryB

--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO

C. 自動將用戶對應至登入,並視需要建立新的登入

下列範例示範如何使用 Auto_Fix 將現有用戶對應至相同名稱的登入,或建立如果登入不存在,則為密碼Mary的 SQL Server 登入B3r12-3x$098f6Mary

USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO