sp_change_users_login (Transact-SQL)
適用於:SQL Server
將現有的資料庫使用者對應至SQL Server登入。
重要
未來的 Microsoft SQL Server 版本將移除這項功能。 請避免在新的開發工作中使用這項功能,並規劃修改目前使用這項功能的應用程式。 請改用 ALTER USER 。
語法
sp_change_users_login [ @Action = ] 'action'
[ , [ @UserNamePattern = ] 'user' ]
[ , [ @LoginName = ] 'login' ]
[ , [ @Password = ] 'password' ]
[;]
引數
[ @Action= ] 'action'
描述此程序所要執行的動作。 action 是 Varchar (10) 。 action 可以有下列其中一個值。
值 | 描述 |
---|---|
Auto_Fix | 將目前資料庫中sys.database_principals系統目錄檢視中的使用者專案連結到相同名稱的SQL Server登入。 如果沒有相同名稱的登入,則會建立一個。 檢查 Auto_Fix 語句的結果,以確認確實已建立正確的連結。 避免在安全性敏感性情況下使用 Auto_Fix 。 當您使用 Auto_Fix時,如果登入不存在,則必須指定 使用者 和 密碼 ,否則您必須指定 使用者 ,但將會忽略 密碼 。 登入 必須是 Null。 user 必須是目前資料庫中的有效使用者。 不能有其他使用者對應至登入。 |
Report | 列出目前資料庫中未連結至任何登入的使用者和對應的安全性識別碼 (SID)。 使用者、 登入和 密碼 必須是 Null 或未指定。 若要使用系統資料表將報表選項取代為查詢,請將 sys.server_prinicpals 中的專案與 sys.database_principals中的專案進行比較。 |
Update_One | 將目前資料庫中的指定使用者連結至現有的SQL Server登入。 必須指定使用者和登入。 password 必須是 Null 或未指定。 |
[ @UserNamePattern= ] 'user'
這是目前資料庫中的使用者名稱。 user 是 sysname,預設值為 Null。
[ @LoginName= ] 'login'
這是SQL Server登入的名稱。 login 是預設值為 NULL 的 sysname。
[ @Password= ] 'password'
這是指定 Auto_Fix 所建立之新SQL Server登入的密碼。 如果已存在相符的登入,則會對應使用者和登入,並忽略 密碼 。 如果相符的登入不存在,sp_change_users_login會建立新的SQL Server登入,並將密碼指派為新登入的密碼。 password 為 sysname,且不得為 Null。
重要
一律使用 強式密碼!
傳回碼值
0 (成功) 或 1 (失敗)
結果集
資料行名稱 | 資料類型 | 描述 |
---|---|---|
UserName | sysname | 資料庫使用者名稱。 |
UserSID | varbinary(85) | 使用者的安全性識別碼。 |
備註
使用 sp_change_users_login,將目前資料庫中的資料庫使用者與SQL Server登入連結。 如果使用者的登入變更,可利用 sp_change_users_login 將使用者連結至新的登入,此舉並不會遺失使用者權限。 新的 登入 不能是 sa,而且 使用者 不能是 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 選項。
範例
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 AdventureWorks2012;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C. 自動將使用者對應至登入,視需要建立新的登入
下列範例示範如何使用 將 Auto_Fix
現有使用者對應至相同名稱的登入,或建立登入不存在時具有密碼 B3r12-3x$098f6
的SQL Server Mary
登入 Mary
。
USE AdventureWorks2012;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO
另請參閱
安全性預存程序 (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_adduser (Transact-SQL)
sp_helplogins (Transact-SQL)
系統預存程序 (Transact-SQL)
sys.database_principals (Transact-SQL)