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