sp_change_users_login (Transact-SQL)
適用於:SQL Server
將現有的資料庫用戶對應至 SQL Server 登入。
重要
SQL Server 的未來版本將移除此功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 ALTER USER 。
語法
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_prinicpals 專案與 中的 sys.database_principals 專案進行比較。 |
Update_One |
將目前資料庫中指定的 @UserNamePattern 連結至現有的 SQL Server @LoginName。 必須指定@UserNamePattern 和 @LoginName 。 必須NULL 或未指定@Password。 |
[ @UserNamePattern = ] N'UserNamePattern'
目前資料庫中用戶的名稱。 @UserNamePattern為 sysname,預設值為 NULL
。
[ @LoginName = ] N'LoginName'
SQL Server 登入的名稱。 @LoginName為 sysname,預設值為 NULL
。
[ @Password = ] N'密碼'
指派給新 SQL Server 登入的密碼,該登入是藉由指定 Auto_Fix
所建立。 @Password是 sysname,而且不能是 NULL
。 如果相符的登入已經存在,則會對應使用者和登入,並 忽略@Password 。 如果相符的登入不存在,請建立新的 SQL Server 登入,sp_change_users_login
並將@Password指派為新登入的密碼。
重要
一 律使用強密碼。
傳回碼值
0
(成功) 或 1
(失敗)。
結果集
資料行名稱 | 資料類型 | 描述 |
---|---|---|
UserName |
sysname | 資料庫用戶名稱。 |
UserSID |
varbinary(85) | 使用者的安全性識別碼。 |
備註
使用 sp_change_users_login
連結目前資料庫中的資料庫使用者與 SQL Server 登入。 如果使用者的登入變更,請使用 sp_change_users_login
將用戶連結至新的登入,而不會失去用戶權力。 新的 @LoginName 不能是 sa
,而且 @UserNamePattern 不能是 dbo
、 guest
或 INFORMATION_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 程式碼範例使用 AdventureWorks2022
或 AdventureWorksDW2022
範例資料庫,從 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
將現有用戶對應至相同名稱的登入,或建立如果登入不存在,則為密碼B3r12-3x$098f6
的 SQL Server 登入Mary
Mary
。
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO