sp_change_users_login (Transact-SQL)
既存のデータベース ユーザーを 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 を使用する際、ログインがまだ存在していない場合は user と password を指定します。ログインが既に存在している場合は user を指定する必要がありますが、password は無視されます。login には NULL を指定する必要があります。user は現在のデータベースで有効なユーザーであることが必要です。別のユーザーがマップされているログインは使用できません。
Report
現在のデータベース内で、どのログインにもリンクされていないユーザーと、対応するセキュリティ識別子 (SID) を一覧表示します。user、login、および password は NULL にするか、指定しないでください。
Update_One
現在のデータベースに存在する、指定した user を、既存の SQL Serverlogin にリンクします。user および login を指定する必要があります。password は NULL にするか、指定しないでください。
[ @UserNamePattern = ] 'user'
現在のデータベースに存在するユーザーの名前を指定します。user のデータ型は sysname で、既定値は NULL です。[ @LoginName = ] 'login'
SQL Server ログインの名前を指定します。login のデータ型は sysname で、既定値は NULL です。[ @Password = ] 'password'
Auto_Fix を指定して作成される新しい SQL Server ログインに割り当てるパスワードを指定します。一致するログインが既に存在する場合は、ユーザーとログインがマップされ、password は無視されます。一致するログインが存在しない場合、sp_change_users_login では新しい SQL Server ログインが作成され、新しいログインのパスワードとして password が割り当てられます。password のデータ型は sysname で、NULL は指定できません。セキュリティに関する注意 強力なパスワードを使用してください。詳細については、「強力なパスワード」を参照してください。
リターン コード値
0 (成功) または 1 (失敗)
結果セット
列名 |
データ型 |
説明 |
---|---|---|
UserName |
sysname |
データベース ユーザー名。 |
UserSID |
varbinary(85) |
ユーザーのセキュリティ識別子。 |
説明
sp_change_users_login は、現在のデータベースのデータベース ユーザーを SQL Server ログインとリンクする場合に使用します。ユーザーのログインが既に変更されている場合は、sp_change_users_login を使用してユーザーを新しいログインにリンクすれば、ユーザーの権限が失われることはありません。新しい login を sa にすることはできません。また、userに 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 AdventureWorks;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO
C. ユーザーをログインに自動的にマップし、必要に応じて新しいログインを作成する
次の例では、Auto_Fix を使用して既存のユーザーを同じ名前のログインにマップする方法を示します。Mary が存在しない場合は、SQL Server ログイン Mary をパスワード B3r12-3x$098f6 を使用して作成します。
USE AdventureWorks;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO