sp_migrate_user_to_contained (Transact-SQL)

SQL Server ログインにマップされたデータベース ユーザーを、パスワード付きの包含データベース ユーザーに変換します。 包含データベースでは、データベースがインストールされている SQL Server インスタンスの依存関係を削除するには、このプロシージャを使用します。 sp_migrate_user_to_contained を使用すると、ユーザーを元の SQL Server ログインから分離し、パスワードや既定の言語などの設定を包含データベースに対して個別に管理できるようになります。 sp_migrate_user_to_contained を使用した後で、包含データベースを SQL Server データベース エンジン の別のインスタンスに移動し、現在の SQL Server インスタンス ログインの依存関係を削除できます。

メモ このプロシージャは、包含データベースでのみ使用します。 詳細については、「包含データベース」を参照してください。

構文

sp_migrate_user_to_contained [ @username = ] N'user' , 
    [ @rename = ] { N'copy_login_name' | N'keep_name' } , 
    [ @disablelogin = ] { N'disable_login' | N'do_not_disable_login' } 

引数

  • [@username = ] N'user'
    SQL Server 認証ログインにマップされた、現在の包含データベースのユーザーの名前を指定します。 値のデータ型は sysname で、既定値は NULL です。

  • [@rename = ] N'copy_login_name' | N'keep_name'
    ログインに基づくデータベース ユーザーがログイン名とは異なるユーザー名を持つ場合は、keep_name を使用して、移行中にデータベース ユーザー名を保持してください。 ユーザー名ではなくログイン名を持つ新しい包含データベース ユーザーを作成するには、copy_login_name を使用します。 ログインに基づくデータベース ユーザーがログイン名と同じユーザー名を持つ場合は、どちらのオプションでも、名前を変更することなく包含データベース ユーザーが作成されます。

  • [@disablelogin = ] N'disable_login' | N'do_not_disable_login'
    disable_login は、マスター データベースのログインを無効にします。 ログインが無効になっているときに接続するには、接続文字列の一部として、包含データベース名を initial catalog として指定する必要があります。

リターン コードの値

0 (成功) または 1 (失敗)

説明

sp_migrate_user_to_contained は、ログインのプロパティや権限に関係なく、パスワード付きの包含データベース ユーザーを作成します。 たとえば、ログインが無効になっている場合や、データベースに対するユーザーの CONNECT 権限が拒否されている場合でも、このプロシージャは正常に実行できます。

sp_migrate_user_to_contained には、次の制限があります。

  • データベース内に存在しないユーザー名を指定する必要がある。

  • dbo や guest などの組み込みのユーザーは変換できない。

  • 署名されたストアド プロシージャの EXECUTE AS 句でユーザーを指定できない。

  • ユーザーは EXECUTE AS OWNER 句が含まれるストアド プロシージャを所有できない。

  • sp_migrate_user_to_contained は、システム データベースでは使用できない。

セキュリティ

ユーザーの移行の際には、SQL Server インスタンスからすべての管理者ログインを無効にしたり、削除したりしないよう注意してください。 すべてのログインを削除した場合は、「システム管理者がロックアウトされた場合の SQL Server への接続」を参照してください。

BUILTIN\Administrators ログインが存在する場合、管理者は [管理者として実行] オプションを使用してアプリケーションを起動し、接続できます。

権限

CONTROL SERVER 権限が必要です。

使用例

A. 単一のユーザーを移行する

次の例では、Barry という名前の SQL Server ログインをパスワード付きの包含データベース ユーザーに移行します。 ユーザー名は変更されずに保持され、ログインは有効のままとなります。

sp_migrate_user_to_contained 
@username = N'Barry',
@rename = N'keep_name',
@disablelogin = N'do_not_disable_login' ;

B. ログインのあるすべてのデータベース ユーザーをログインなしの包含データベース ユーザーに移行する

次の例では、SQL Server ログインに基づくすべてのユーザーを、パスワードを持つ包含データベース ユーザーに移行します。 有効になっていないログインは除外します。 この例は、包含データベースで実行する必要があります。

DECLARE @username sysname ;
DECLARE user_cursor CURSOR
    FOR 
        SELECT dp.name 
        FROM sys.database_principals AS dp
        JOIN sys.server_principals AS sp 
        ON dp.sid = sp.sid
        WHERE dp.authentication_type = 1 AND sp.is_disabled = 0;
OPEN user_cursor
FETCH NEXT FROM user_cursor INTO @username
    WHILE @@FETCH_STATUS = 0
    BEGIN
        EXECUTE sp_migrate_user_to_contained 
        @username = @username,
        @rename = N'keep_name',
        @disablelogin = N'disable_login';
    FETCH NEXT FROM user_cursor INTO @username
    END
CLOSE user_cursor ;
DEALLOCATE user_cursor ;

関連項目

概念

部分的包含データベースへの移行

包含データベース