SQL Server ログインをエクスポートする

このドキュメントでは、sp_help_revlogin ストアド プロシージャを使用して、Cloud SQL for SQL Server インスタンスから SQL Server ログイン、セキュリティ ID(SID)、パスワード ハッシュをエクスポートする方法について説明します。

データベースを移行する場合や、SQL Server インスタンス間でデータベース同期を設定する場合は、一致する SID とパスワード ハッシュを使用して、移行先インスタンスでユーザー ログインを再作成する必要があります。これにより、データベース ユーザーは対応するサーバー ログインにマッピングされたままになり、権限が保持されます。

Cloud SQL for SQL Server は、msdb データベースに sp_help_revlogin ストアド プロシージャを提供し、ユーザー ログインを再作成するための Transact-SQL(T-SQL)スクリプトを生成します。

始める前に

必要なロール

データベース フラグの構成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

この事前定義ロールには、データベース フラグを構成するために必要な cloudsql.instances.update 権限が含まれています。

カスタムロールや他の事前定義ロールを使用して、この権限を取得することもできます。

データベース権限

デフォルトの sqlserver SQL Server ユーザーロールにアクセスできることを確認します。

データベース フラグを有効にする

msdb データベースに sp_help_revlogin ストアド プロシージャをインストールするには、インスタンスで cloud sql enable sp_help_revlogin データベース フラグを有効にします。

Google Cloud コンソール

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. [編集] をクリックします。
  4. [インスタンスのカスタマイズ] セクションで、[フラグ] を開きます。
  5. [フラグを追加] をクリックします。
  6. 使用可能なフラグのリストから cloud sql enable sp_help_revlogin を選択します。
  7. フラグの値を [on] に設定します。
  8. [保存] をクリックします。

gcloud CLI

gcloud CLI を使用してフラグを有効にします。

gcloud sql instances patch INSTANCE_NAME \
    --database-flags="cloud sql enable sp_help_revlogin=on"

INSTANCE_NAME は、Cloud SQL インスタンスの名前に置き換えます。

サポートされているクライアント ツールを使用して接続する

sp_help_revlogin ストアド プロシージャは、表形式の結果セット(SELECT ステートメント)ではなく、T-SQL PRINT ステートメント(情報メッセージ)を使用して、生成された CREATE LOGIN スクリプトを出力します。

次のいずれかのツールを使用して、Cloud SQL インスタンスに接続します。

  • SQL Server Management Studio(SSMS): インスタンスに接続し、プロシージャを実行して、[メッセージ] タブで生成されたスクリプトを表示します。または、Control+T キーを押して実行出力モードを [結果をテキストに] に切り替えてから、クエリを実行します。
  • Visual Studio Code: MSSQL 拡張機能を使用して接続し、プロシージャを実行して、生成されたスクリプトを [メッセージ] タブで表示します。
  • sqlcmd ユーティリティ: インスタンスに接続し、生成されたスクリプトを SQL ファイルに直接出力します。

    sqlcmd -S INSTANCE_IP \
        -U USERNAME \
        -P PASSWORD -d msdb \
        -Q "EXEC dbo.sp_help_revlogin" -o output_logins.sql
    

    次のように置き換えます。

    • INSTANCE_IP: Cloud SQL インスタンスの IP アドレス。
    • USERNAME: 管理データベースのユーザー名(sqlserver など)。
    • PASSWORD: データベース ユーザーのパスワード。

sp_help_revlogin を使用してログインをエクスポートする

msdb データベースに接続し、sp_help_revlogin ストアド プロシージャを実行します。

  • すべての顧客のログイン情報をエクスポートするには:

    EXEC msdb.dbo.sp_help_revlogin;
    
  • 特定のログイン情報をエクスポートするには:

    EXEC msdb.dbo.sp_help_revlogin
        @login_name = 'LOGIN_NAME';
    

    LOGIN_NAME は、エクスポートするログインの名前に置き換えます。

移行先インスタンスにログインを再作成する

  1. 生成された CREATE LOGIN ステートメントをクエリ出力からコピーします。
  2. 移行先の SQL Server インスタンスに接続します。
  3. 生成されたステートメントをクエリ ウィンドウで実行するか、sqlcmd を使用して実行します。

生成されたステートメントは、元の SID、デフォルトのデータベース、パスワード ハッシュを使用して、移行先インスタンスにログインを作成します。インスタンス間でログインを転送する際の考慮事項の詳細については、SQL Server のインスタンス間でログインとパスワードを転送するに関する Microsoft のドキュメントをご覧ください。

制限事項と除外されたログイン

sp_help_revlogin は、次の種類のログインをエクスポートから自動的に除外します。

  • Google Cloud サービス アカウントと内部管理アカウント。
  • 内部 SQL Server システム アカウント(## で始まるログイン)。
  • sysadmin 固定サーバーロールに割り当てられたログイン。
  • 制限付きの管理サーバーロールに割り当てられたログイン。

データベース フラグを無効にする

ストアド プロシージャが不要になった場合は、フラグを off に設定します(または、インスタンスからフラグを削除します)。

Google Cloud コンソール

  1. Google Cloud コンソールで、Cloud SQL の [インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. インスタンス名をクリックして [概要] ページを開きます。
  3. [編集] をクリックします。
  4. [インスタンスのカスタマイズ] セクションで、[フラグ] を開きます。
  5. cloud sql enable sp_help_revlogin を見つけて、値を off に設定します(または、削除 をクリックしてフラグを削除します)。
  6. [保存] をクリックします。

gcloud CLI

gcloud sql instances patch INSTANCE_NAME \
    --database-flags="cloud sql enable sp_help_revlogin=off"

off に設定するか削除すると、Cloud SQL は msdb データベースから dbo.sp_help_revlogin を自動的に削除します。

次のステップ