sp_change_users_login (Transact-SQL)

既存のデータベース ユーザーを SQL Server ログインにマップします。この機能は、将来のバージョンの Microsoft SQL Server では削除される予定です。新しい開発作業では、この機能の使用を避け、現在この機能を使用しているアプリケーションは修正するようにしてください。代わりに ALTER USER を使用してください。

トピック リンク アイコンTransact-SQL 構文表記規則

構文

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 AdventureWorks2008R2;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO

C. ユーザーをログインに自動的にマップし、必要に応じて新しいログインを作成する

次の例では、Auto_Fix を使用して既存のユーザーを同じ名前のログインにマップする方法を示します。Mary が存在しない場合は、SQL Server ログイン Mary をパスワード B3r12-3x$098f6 を使用して作成します。

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