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 インスタンス ログインへの依存関係を排除できます。
注意事項
効果を元に戻すことができないため、 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'username'
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'
master
データベースのログインを無効にするために使用されます。 ログインが無効になっているときに接続するには、接続文字列の一部として、包含データベース名を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
ログインが存在する場合、管理者は Run as Administrator オプションを使用してアプリケーションを起動することで接続できます。
アクセス許可
CONTROL SERVER
アクセス許可が必要です。
例
A. 1 人のユーザーを移行する
次の例では、 Barry
という名前の SQL Server ログインを、パスワードを持つ包含データベース ユーザーに移行します。 この例では、ユーザー名は変更せず、ログインは有効のままにします。
EXEC 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
INNER 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;