sp_migrate_user_to_contained (Transact-SQL)

適用対象:SQL Server

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

Note

sp_migrate_user_to_containedを使用する場合は、効果を逆にすることができないので注意してください。 このプロシージャは、包含データベースでのみ使用されます。 詳細については、「 包含データベース」を参照してください。

構文

  
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マスター データベースのログインを無効にします。 ログインが無効になっているときに接続するには、接続文字列の一部として初期カタログとして包含データベース名を指定する必要があります。

リターン コードの値

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\管理istrators ログインが存在する場合、管理者は[管理として実行]オプションを使用してアプリケーションを起動することで接続できます。

アクセス許可

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 ;  

参照

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