サブスクライバー側のテーブルのスキーマを変更できるユーザは任意のコードをそれらのテーブルを変更するサブスクリプションを所有するロールとして実行できます。
そのようなテーブルの所有権とTRIGGER
権限はスーパーユーザが信頼するロールにのみ付与するように制限してください。
さらに信用できないユーザがテーブルを作成できる場合は、テーブルを明示的にリストしているパブリケーションのみを使用してください。
つまり、パブリッシャーやサブスクライバーに非一時テーブルを作成することを許可しているすべてのユーザを、スーパーユーザが信用している場合にのみ、FOR ALL TABLES
またはFOR TABLES IN SCHEMA
サブスクリプションを作成してください。
レプリケーション接続のために使われるロールには、REPLICATION
属性が付与されている(もしくはスーパーユーザである)必要があります。
ロールに SUPERUSER
とBYPASSRLS
がない場合は、パブリッシャーは行セキュリティポリシーを実行できます。
ロールが全てのテーブルの所有者を信頼していない場合、接続文字列にoptions=-crow_security=off
を含めてください。
テーブルの所有者が行セキュリティポリシーを追加した場合、ポリシーが実行されるのではなく、レプリケーションが停止します。
接続のためのロールはpg_hba.conf
で設定され、 LOGIN
属性を持つ必要があります。
テーブルの初期データをコピーできるためには、レプリケーション接続に使用されるロールは、パブリッシュされるテーブルに対してSELECT
権限を持っていなければなりません。
(あるいはスーパーユーザでなければなりません。)
パブリケーションを作成するためには、ユーザはデータベース中のCREATE
権限を持っていなければなりません。
テーブルをパブリケーションに追加するためには、ユーザはテーブルの所有権限を持っていなければなりません。 スキーマのすべてのテーブルをパブリケーションに追加するには、ユーザがスーパーユーザである必要があります。 自動的にすべてのテーブルにパブリッシュするパブリケーションを作成するには、ユーザはスーパーユーザでなければなりません。
サブスクリプションを作成するためには、ユーザはスーパーユーザでなければなりません。
ローカルデータベースで実行されるサブスクリプション適用プロセスは、サブスクリプション所有者の権限で実行されます。
パブリッシャーでは、権限はレプリケーション接続の開始時に一度だけチェックされ、変更レコードが読み取られるたびに再チェックされません。
サブスクライバーでは、サブスクリプション所有者の権限は、適用時にトランザクションごとに再チェックされます。 同時に並行しているトランザクションによってサブスクリプションの所有権が変更されたときにワーカーがトランザクションを適用している場合、現在のトランザクションの適用は古い所有者の権限で継続されます。