sp_change_users_login (Transact-SQL)

適用対象:SQL Server

既存のデータベース ユーザーをSQL Server ログインにマップします。

重要

この機能は、Microsoft SQL Server の将来のバージョンで削除されます。 新規の開発作業ではこの機能を使用しないようにし、現在この機能を使用しているアプリケーションは修正することを検討してください。 代わりに ALTER USER を 使用してください。

Transact-SQL 構文表記規則

構文

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

引数

[ @Action= ] 'action'
プロシージャにより実行されるアクションの説明です。 actionvarchar(10)ですアクション には、次のいずれかの値を指定できます。

説明
Auto_Fix 現在のデータベースのsys.database_principals システム カタログ ビューのユーザー エントリを、同じ名前のSQL Server ログインにリンクします。 同じ名前のログインが存在しない場合は、新しく作成されます。 Auto_Fix ステートメントの結果を調べて、正しいリンクが実際に作成されていることを確認します。 セキュリティに依存する状況では 、Auto_Fix を使用しないでください。

Auto_Fixを使用する場合は、ログインがまだ存在しない場合はユーザーパスワードを指定する必要があります。それ以外の場合はユーザーを指定する必要がありますが、パスワードは無視されます。 login は NULL である必要があります。 user は、現在のデータベース内の有効なユーザーである必要があります。 ログインに別のユーザーをマップすることはできません。
Report 現在のデータベース内で、どのログインにもリンクされていないユーザーと、対応するセキュリティ識別子 (SID) を一覧表示します。 ユーザーログインおよびパスワード は NULL であるか、指定されていない必要があります。

システム テーブルを使用してレポート オプションをクエリに置き換えるには、 sys.server_prinicpals のエントリと sys.database_principals 内のエントリを比較します。
Update_One 現在のデータベース内の指定されたユーザーを既存のSQL Server ログインにリンクしますuserlogin を指定する必要があります。 password は NULL であるか、指定されていない必要があります。

[ @UserNamePattern= ] 'user'
現在のデータベース内のユーザーの名前です。 usersysname で、既定値は NULL です。

[ @LoginName= ] 'login'
SQL Server ログインの名前です。 login のデータ型は sysname で、既定値は NULL です。

[ @Password= ] 'password'
Auto_Fixを指定して作成された新しいSQL Server ログインに割り当てられたパスワードです。 一致するログインが既に存在する場合、ユーザーとログインはマップされ、 パスワード は無視されます。 一致するログインが存在しない場合、sp_change_users_loginは新しいSQL Serverログインを作成し、新しいログインのパスワードとしてパスワードを割り当てます。 passwordsysname であり、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 固定データベース ロールのメンバーシップが必要です。 Auto_Fix オプションを指定できるのは、sysadmin 固定サーバー ロールのメンバーだけです。

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が存在しない場合にパスワードB3r12-3x$098f6を持つSQL Server ログインMaryを作成する方法を示します。

USE AdventureWorks2022;  
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)