説明
cross db ownership chaining は、必要な条件を満たすデータベース間の所有権チェーンを許可します。参照元と参照先のオブジェクトの所有者が同じでチェーンが適用される場合、参照先の権限確認が省略され、意図しないデータアクセスにつながるおそれがあります。
Cloud SQL はすべての SQL Server バージョンでこのフラグを非推奨とし、新たに on に設定することを許可していません。既存インスタンスでこのフラグが有効な場合は、依存関係を確認したうえで、フラグを削除するか off に変更する必要があります。
想定される影響
- 一つのデータベースのオブジェクトを変更できるユーザーが、別のデータベースのデータに意図せずアクセスするおそれがあります。
- 依存する処理を確認せず無効にすると、データベース間の操作が失敗する場合があります。
対処方法
- 既存の
cross db ownership chainingを削除またはoffにする前に、データベース間の呼び出しと所有権を確認してください。 - 必要なアクセスは明示的な最小権限や署名付きストアドプロシージャなどのサポートされる方式で設定し、正常な処理と不要なアクセスの拒否をテストしてください。
例
インスタンス設定の一部を比較する例です。サポートされるエンジンバージョンと SQL Server 用のマシンタイプを使い、var.sql_server_tier と省略した必須入力を指定してください。このフラグ変更に、例にあるエンジンバージョンの変更が必要なわけではありません。 変更前の on は過去の構成であり、現在の新規インスタンスに適用する設定ではありません。
変更前
hcl
resource "google_sql_database_instance" "db" {
name = "sqlserver-instance"
database_version = "SQLSERVER_2017_EXPRESS"
region = "us-central1"
settings {
database_flags {
name = "cross db ownership chaining"
value = "on"
}
}
}
変更後
hcl
resource "google_sql_database_instance" "db" {
name = "sqlserver-instance"
database_version = "SQLSERVER_2019_STANDARD"
region = "us-central1"
settings {
tier = var.sql_server_tier
database_flags {
name = "cross db ownership chaining"
value = "off"
}
}
}
補足:
- 変更前: 過去のデータベース間所有権チェーンが有効な構成です。すべてのデータベースへの無条件の許可ではありません。
- 変更後: フラグを無効にします。必要なデータベース間操作には適切な権限設定が必要です。