sp_change_users_login (Transact-SQL)sp_change_users_login (Transact-SQL)

適用於: 是SQL Server 否Azure SQL Database 否Azure Synapse Analytics (SQL DW) 否平行處理資料倉儲 APPLIES TO: yesSQL Server noAzure SQL Database noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

將現有的資料庫使用者對應至 SQL ServerSQL Server 登入。Maps an existing database user to a SQL ServerSQL Server login. 這項功能處於維護模式,並可能在 Microsoft SQL Server 的未來版本中移除。This feature is in maintenance mode and may be removed in a future version of Microsoft SQL Server. 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。Avoid using this feature in new development work, and plan to modify applications that currently use this feature.請改用ALTER USERUse ALTER USER instead.

主題連結圖示 Transact-SQL 語法慣例Topic link icon Transact-SQL Syntax Conventions


sp_change_users_login [ @Action = ] 'action'   
    [ , [ @UserNamePattern = ] 'user' ]   
    [ , [ @LoginName = ] 'login' ]   
    [ , [ @Password = ] 'password' ]  


[ @Action= ][動作][ @Action= ] 'action'
描述此程序所要執行的動作。Describes the action to be performed by the procedure. 動作Varchar (10)action is varchar(10). 動作可以有下列其中一個值。action can have one of the following values.

Value 描述Description
Auto_FixAuto_Fix 將目前資料庫中 sys.database_principals 系統目錄檢視的使用者項目連結到相同名稱的 SQL ServerSQL Server 登入。Links a user entry in the sys.database_principals system catalog view in the current database to a SQL ServerSQL Server login of the same name. 如果沒有相同名稱的登入,則會建立一個。If a login with the same name does not exist, one will be created. 檢查Auto_Fix語句的結果,以確認確實已進行正確的連結。Examine the result from the Auto_Fix statement to confirm that the correct link is in fact made. 避免在安全性敏感的情況下使用Auto_FixAvoid using Auto_Fix in security-sensitive situations.

當您使用Auto_Fix時,如果登入不存在,您必須指定使用者密碼; 否則,您必須指定使用者,但將忽略密碼When you use Auto_Fix, you must specify user and password if the login does not already exist, otherwise you must specify user but password will be ignored. 入必須是 Null。login must be NULL. 使用者必須是目前資料庫中的有效使用者。user must be a valid user in the current database. 不能有其他使用者對應至登入。The login cannot have another user mapped to it.
ReportReport 列出目前資料庫中未連結至任何登入的使用者和對應的安全性識別碼 (SID)。Lists the users and corresponding security identifiers (SID) in the current database that are not linked to any login. 使用者入和密碼必須是 Null 或未指定。user, login, and password must be NULL or not specified.

若要將報表選項取代為使用系統資料表的查詢,請將server_prinicpals sys.databases中的專案與 sys.databases 中的專案進行比較。 database_principalsTo replace the report option with a query using the system tables, compare the entries in sys.server_prinicpals with the entries in sys.database_principals.
Update_OneUpdate_One 將目前資料庫中指定的使用者連結到現有SQL ServerSQL Server入。Links the specified user in the current database to an existing SQL ServerSQL Server login. 必須指定使用者入。user and login must be specified. 密碼必須是 Null 或未指定。password must be NULL or not specified.

[ @UserNamePattern= ]'使用者'[ @UserNamePattern= ] 'user'
這是目前資料庫中的使用者名稱。Is the name of a user in the current database. usersysname,預設值是 Null。user is sysname, with a default of NULL.

[ @LoginName= ]「入」[ @LoginName= ] 'login'
這是 SQL ServerSQL Server 登入的名稱。Is the name of a SQL ServerSQL Server login. loginsysname,預設值是 Null。login is sysname, with a default of NULL.

[ @Password= ]'password'[ @Password= ] 'password'
這是指派給新SQL ServerSQL Server登入的密碼,由指定Auto_Fix來建立。Is the password assigned to a new SQL ServerSQL Server login that is created by specifying Auto_Fix. 如果相符的登入已經存在,則會對應使用者和登入,並忽略密碼If a matching login already exists, the user and login are mapped and password is ignored. 如果符合的登入不存在,sp_change_users_login 會建立新SQL ServerSQL Server的登入,並指派密碼做為新登入的密碼。If a matching login does not exist, sp_change_users_login creates a new SQL ServerSQL Server login and assigns password as the password for the new login. passwordsysname,而且不得為 Null。password is sysname, and must not be NULL.

重要!!IMPORTANT!! 一律使用強式密碼!Always use a strong Password!

傳回碼值Return Code Values

0 (成功) 或 1 (失敗)0 (success) or 1 (failure)

結果集Result Sets

資料行名稱Column name 資料類型Data type 描述Description
UserNameUserName sysnamesysname 資料庫使用者名稱。Database user name.
UserSIDUserSID Varbinary (85)varbinary(85) 使用者的安全性識別碼。User's security identifier.


請使用 sp_change_users_login 將目前資料庫中的資料庫使用者與 SQL ServerSQL Server 登入連結。Use sp_change_users_login to link a database user in the current database with a SQL ServerSQL Server login. 如果使用者的登入變更,可利用 sp_change_users_login 將使用者連結至新的登入,此舉並不會遺失使用者權限。If the login for a user has changed, use sp_change_users_login to link the user to the new login without losing user permissions. 新的入不得為 sa,且使用者不得為 dbo、guest 或 INFORMATION_SCHEMA 使用者。The new login cannot be sa, and the usercannot be dbo, guest, or an INFORMATION_SCHEMA user.

sp_change_users_login 不能用來將資料庫使用者對應至 Windows 層級的主體、憑證或非對稱金鑰。sp_change_users_login cannot be used to map database users to Windows-level principals, certificates, or asymmetric keys.

sp_change_users_login 不能搭配從 Windows 主體建立的 SQL ServerSQL Server 登入使用,或是搭配 CREATE USER WITHOUT LOGIN 建立的使用者使用。sp_change_users_login cannot be used with a SQL ServerSQL Server login created from a Windows principal or with a user created by using CREATE USER WITHOUT LOGIN.

sp_change_users_login 無法在使用者定義的交易內執行。sp_change_users_login cannot be executed within a user-defined transaction.


需要 db_owner 固定資料庫角色中的成員資格。Requires membership in the db_owner fixed database role. 只有系統管理員(sysadmin)固定伺服器角色的成員,才能夠指定Auto_Fix選項。Only members of the sysadmin fixed server role can specify the Auto_Fix option.


A.A. 顯示目前使用者與登入對應的報表Showing a report of the current user to login mappings

下列範例會產生目前資料庫中的使用者及其安全性識別碼 (SID) 的報表。The following example produces a report of the users in the current database and their security identifiers (SIDs).

EXEC sp_change_users_login 'Report';  

B.B. 將資料庫使用者對應至新的 SQL Server 登入Mapping a database user to a new SQL Server login

下列範例中,資料庫使用者會與新的 SQL ServerSQL Server 登入建立關聯。In the following example, a database user is associated with a new SQL ServerSQL Server login. 第一次對應至其他登入的資料庫使用者 MB-Sales,會重新對應至登入 MaryBDatabase user MB-Sales, which at first is mapped to another login, is remapped to login MaryB.

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

C.C. 自動將使用者對應至登入,視需要建立新的登入Automatically mapping a user to a login, creating a new login if it is required

下列範例會顯示如何使用 Auto_Fix 將現有使用者對應至相同名稱的登入,或者如果登入 SQL ServerSQL Server 不存在的話,就會建立密碼為 MaryB3r12-3x$098f6 登入 MaryThe following example shows how to use Auto_Fix to map an existing user to a login of the same name, or to create the SQL ServerSQL Server login Mary that has the password B3r12-3x$098f6 if the login Mary does not exist.

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

另請參閱See Also

(Transact-sql)的安全性預存程式 Security Stored Procedures (Transact-SQL)
建立登入 (Transact-sql) CREATE LOGIN (Transact-SQL)
sp_adduser (Transact-sql) sp_adduser (Transact-SQL)
sp_helplogins (Transact-sql) sp_helplogins (Transact-SQL)
系統預存程序 (Transact-SQL) System Stored Procedures (Transact-SQL)
sys.database_principals (Transact-SQL)sys.database_principals (Transact-SQL)