30.9. Безопасность
Пользователь, имеющий право изменения схемы таблиц на стороне подписчика, может добиться выполнения произвольного кода от имени роли владельца любой подписки, в которой меняются эти таблицы. Ограничьте круг владельцев и ролей, имеющих право TRIGGER
для таких таблиц, доверенными ролями. Более того, в базе, где недоверенные пользователи могут создавать таблицы, включайте в публикацию только таблицы по списку. Другими словами, создавайте подписку FOR ALL TABLES
или FOR TABLES IN SCHEMA
, только когда суперпользователи доверяют всем пользователям, имеющим право создавать не временные таблицы на стороне публикации или подписки.
Роль, используемая для подключения репликации, должна иметь атрибут REPLICATION
(или быть суперпользователем). Если у роли отсутствуют свойства SUPERUSER
и BYPASSRLS
, при репликации могут выполняться политики защиты строк, определённые на стороне публикации. Если эта роль не может доверять владельцам всех таблиц, добавьте в строку подключения options=-crow_security=off
; если владелец таблицы добавит политику защиты строк позже, при таком значении параметра репликация остановится, но политика выполняться не будет. Доступ для этой роли должен быть настроен в pg_hba.conf
, и эта роль также должна иметь атрибут LOGIN
.
Чтобы иметь возможность скопировать исходные данные таблицы, роль, используемая для соединения репликации, должна иметь право SELECT
в публикуемой таблице (или быть суперпользователем).
Чтобы создать публикацию, пользователь должен иметь право CREATE
в базе данных.
Чтобы добавлять таблицы в публикацию, пользователь должен иметь права владельца для этих таблиц. Добавлять в публикацию все таблицы схемы может только суперпользователь. Также только суперпользователям разрешено создавать публикации, публикующие все таблицы или все таблицы в схеме автоматически.
Создавать подписки разрешено только суперпользователям.
Процесс применения изменений подписки будет выполняться в локальной базе с правами владельца подписки.
На публикующем сервере права проверяются только один раз при установлении подключения для репликации и не перепроверяются при чтении каждой записи изменения.
На стороне подписки права владельца подписки перепроверяются для каждой транзакции, когда она применяется. Если рабочий процесс осуществляет применение транзакции, когда в параллельной транзакции меняется владелец подписки, применение текущей транзакции продолжается с правами старого владельца.