30.7. セキュリティ

サブスクライバ側のテーブルのスキーマを変更できるユーザは任意のコードをスーパーユーザとして実行することができます。 そのようなテーブルの所有権とTRIGGER権限はスーパーユーザが信頼するロールにのみ付与するように制限してください。 さらに信用できないユーザがテーブルを作成できる場合は、テーブルを明示的にリストしているパブリケーションのみを使用してください。 つまり、スーパーユーザが全てのユーザにパブリッシャやサブスクライバに非一時テーブルを作成することを信用している場合にのみ、FOR ALL TABLESサブスクリプションを作成してください。

レプリケーション接続のために使われるロールには、REPLICATION属性が付与されている(もしくはスーパーユーザである)必要があります。 ロールに SUPERUSERBYPASSRLSがない場合は、パブリッシャは行セキュリティポリシーを実行できます。 ロールが全てのテーブルの所有者を信頼していない場合、接続文字列にoptions=-crow_security=offを含めてください。 テーブルの所有者が行セキュリティポリシーを追加した場合、ポリシーが実行されるのではなく、レプリケーションが停止します。 接続のためのロールはpg_hba.confで設定され、 LOGIN属性を持つ必要があります。

テーブルの初期データをコピーできるためには、レプリケーション接続に使用されるロールは、パブリッシュされるテーブルに対してSELECT権限を持っていなければなりません。 (あるいはスーパーユーザーでなければなりません。)

パブリケーションを作成するためには、ユーザはデータベース中のCREATE権限を持っていなければなりません。

テーブルをパブリケーションに追加するためには、ユーザはテーブルの所有権限を持っていなければなりません。 自動的にすべてのテーブルにパブリッシュするパブリケーションを作成するには、ユーザはスーパーユーザーでなければなりません。

サブスクリプションを作成するためには、ユーザはスーパーユーザーでなければなりません。

ローカルデータベースで実行されるサブスクリプション適用プロセスは、スーパーユーザー権限で実行されます。

権限は、レプリケーション接続の開始時に一度だけチェックされます。 パブリッシャーから更新レコードを読む際、あるいは個々の更新を適用する際には再チェックされません。