変更ストリームのきめ細かいアクセス制御

このページでは、Spanner 変更ストリームでのきめ細かいアクセス制御の仕組みについて説明します。

きめ細かいアクセス制御ユーザーの場合、次の権限を使用して変更ストリーム データへの読み取りアクセスを許可します。両方の付与が必要です。

  • 変更ストリームに対する SELECT を付与します。

    GoogleSQL

    GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE ROLE_NAME;
    

    PostgreSQL

    GRANT SELECT ON CHANGE STREAM CHANGE_STREAM_NAME TO ROLE_NAME;
    
  • 変更ストリーム用に自動作成される読み取り関数に EXECUTE を付与します。変更ストリーム レコードを読み取るには、読み取り関数を使用します。

    GoogleSQL

    GRANT EXECUTE ON TABLE FUNCTION READ_FUNCTION_NAME TO ROLE ROLE_NAME;
    

    PostgreSQL

    GRANT EXECUTE ON FUNCTION READ_FUNCTION_NAME TO ROLE_NAME;
    

    変更ストリームの読み取り関数の命名規則と、返される情報の形式については、次のトピックをご覧ください。

変更ストリームの INFORMATION_SCHEMA ビュー

次のビューには、変更ストリームのデータベース ロールと権限の情報が表示されます。

これらのビューの行は、変更ストリームに対する現在のデータベース ロールの権限に基づいてフィルタリングされます。これにより、プリンシパルはアクセス権を持つロール、権限、そして変更ストリームのみを表示できます。

行フィルタリングは、次の変更ストリーム関連のビューにも適用されます。

GoogleSQL

システムロール spanner_info_reader とそのメンバーには、フィルタされていない INFORMATION_SCHEMA が常に表示されます。

PostgreSQL

システムロール spanner_info_reader とそのメンバーには、フィルタされていない information_schema が表示されます。

行フィルタリングは、変更ストリームの読み取り関数の次のメタデータビューにも適用されます。

注意点

  • 変更ストリームでは、メタデータ データベースを使用して内部状態が維持されます。 メタデータ データベースは、アプリケーション データベースと同じでも、異なるものでも構いません。別のデータベースを使用することをおすすめします。ただし、きめ細かいアクセス制御のユーザーの場合、メタデータ データベースをアプリケーション データベースと同じにすることはできません。これは、Dataflow ジョブを実行する IAM プリンシパルが、メタデータ データベースに対してデータベース レベルで読み取り / 書き込みアクセス権を必要とするためです。これにより、アプリケーション データベース用に構成されたきめ細かいアクセス制御権限がオーバーライドされます。

    詳細については、別のメタデータ データベースを検討するをご覧ください。

  • 変更ストリームには、追跡対象のテーブルと列のデータの個別のコピーが含まれているため、変更ストリームへのアクセス権をユーザーに付与する際は注意が必要です。変更ストリームの読み取り元は、テーブルと列に対する SELECT 権限がない場合でも、追跡対象のテーブルと列のデータ変更を表示できます。変更ストリームとその追跡対象のテーブルと列に個別の制御を設定すると柔軟性が向上しますが、潜在的なリスクがあるため、データベースのロールと権限を適切に構成してください。たとえば、テーブルに対する SELECT 権限を含むロールを取り消す場合は、変更ストリームでも SELECT を取り消す(および関連する読み取り関数でも EXECUTE を取り消す)ことを検討してください。

  • すべてのテーブルを追跡する変更ストリームに SELECT を付与すると、付与先は今後追加されるテーブルのデータ変更を確認できます。

詳細