データベース間の所有権チェーンが有効なCloud SQLインスタンス

データベース間の所有権チェーンは、別のデータベースのオブジェクトに対する権限確認に影響します。既存の依存関係を確認し、不要なチェーンを解消してください。

説明

SQL Serverの所有権チェーンでは、参照元と参照先のオブジェクトの所有者が同じで、関連する条件を満たす場合に、参照先の権限確認を省略できます。このチェーンがデータベースをまたぐと、想定したデータベースの範囲を超えてアクセスできるおそれがあります。

Cloud SQLでは、すべてのSQL Serverバージョンでcross db ownership chainingが非推奨となり、新たにonを設定することはできません。すでに有効な場合は、アプリケーションの依存関係を確認してからフラグを削除するか、offに変更してください。

想定される影響

  • 所有権チェーンと過剰なデータベース権限が組み合わさると、意図しないデータベースへのアクセスや権限昇格につながる可能性があります。
  • 依存する処理を確認せずに無効化すると、アプリケーションのデータベース間の処理が失敗する場合があります。

対処方法

  • データベース間のアクセスが必要な処理と、関連するアカウントやオブジェクトの権限を確認し、既存のcross db ownership chainingフラグを削除するか、文字列offに設定してください。
  • 必要なアクセスだけを許可し、Cloud SQLが案内する証明書で署名したストアドプロシージャの利用を検討してください。変更後は必要な処理が動作し、許可していないアクセスが拒否されることを確認してください。
  • 既存インスタンスの変更には、Cloud SQLコンソールや対応する管理ツール/APIを使用してください。google.cloud 1.14.0のSQLインスタンスモジュールは既存オブジェクトを更新できません。フラグ一覧を置き換える際は、必要なほかのフラグも維持してください。

例

以下は過去の設定例です。SQLSERVER_13_1は現在文書化されているCloud SQLのバージョン識別子ではなく、最初の例のonも新たに設定できません。実際の構成では対応するバージョンを使い、フラグ値は"off"のように文字列で指定してください。

最初の設定

yaml
- name: sql_instance
  google.cloud.gcp_sql_instance:
    auth_kind: serviceaccount
    database_version: SQLSERVER_13_1
    name: "{{ resource_name }}-2"
    project: test_project
    region: us-central1
    service_account_file: /tmp/auth.pem
    settings:
      database_flags:
      - name: cross db ownership chaining
        value: on
      tier: db-n1-standard-1
    state: present

データベース間の所有権チェーンを有効にした過去の設定です。既存の環境で利用している場合は、データベース間の権限とアプリケーションの依存関係を確認してください。

比較用の設定

yaml
- name: sql_instance
  google.cloud.gcp_sql_instance:
    auth_kind: serviceaccount
    database_version: SQLSERVER_13_1
    name: '{{ resource_name }}-2'
    project: test_project
    region: us-central1
    service_account_file: /tmp/auth.pem
    settings:
      database_flags:
      - name: cross db ownership chaining
        value: off
      tier: db-n1-standard-1
    state: present

フラグを無効にする設定です。必要なデータベース間のアクセスを別途構成し、通常の処理が引き続き動作することを確認してください。

参考資料