変更ストリームに対するきめ細かいアクセス制御

このページでは、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 を付与すると、付与対象は今後追加されたテーブルのデータ変更を表示できます。

詳細