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