説明
SQL Serverの所有権チェーンでは、参照元と参照先のオブジェクトの所有者が同じで、関連する条件を満たす場合に、参照先の権限確認を省略できます。このチェーンがデータベースをまたぐと、想定したデータベースの範囲を超えてアクセスできるおそれがあります。
Cloud SQLでは、すべてのSQL Serverバージョンでcross db ownership chainingが非推奨となり、新たにonを設定することはできません。すでに有効な場合は、アプリケーションの依存関係を確認してからフラグを削除するか、offに変更してください。
想定される影響
- 所有権チェーンと過剰なデータベース権限が組み合わさると、意図しないデータベースへのアクセスや権限昇格につながる可能性があります。
- 依存する処理を確認せずに無効化すると、アプリケーションのデータベース間の処理が失敗する場合があります。
対処方法
- データベース間のアクセスが必要な処理と、関連するアカウントやオブジェクトの権限を確認し、既存の
cross db ownership chainingフラグを削除するか、文字列offに設定してください。 - 必要なアクセスだけを許可し、Cloud SQLが案内する証明書で署名したストアドプロシージャの利用を検討してください。変更後は必要な処理が動作し、許可していないアクセスが拒否されることを確認してください。
- 既存インスタンスの変更には、Cloud SQLコンソールや対応する管理ツール/APIを使用してください。
google.cloud1.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
フラグを無効にする設定です。必要なデータベース間のアクセスを別途構成し、通常の処理が引き続き動作することを確認してください。