Чтобы дать роли права на чтение только с slave в PostgreSQL, вы можете использовать механизм репликации для создания реплик слейва и задать соответствующие привилегии для этой роли.
Первым шагом является настройка репликации между мастером и слейвом. Это можно сделать с использованием репликационных слотов или путем настройки файла recovery.conf на слейве. Подробное руководство по настройке репликации в PostgreSQL можно найти в документации PostgreSQL.
После успешной настройки репликации вы можете использовать следующий набор команд для дачи роли прав на чтение только со slave:
1. Создайте новую роль:
CREATE ROLE readonly;
2. Назначьте роль доступ только на слейве:
ALTER ROLE readonly NOLOGIN; ALTER ROLE readonly SET search_path TO ""; ALTER ROLE readonly SET default_transaction_read_only = true;
3. Назначьте роль права на чтение:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO readonly;
4. Добавьте роль в группу slave:
GRANT readonly TO slave;
После выполнения этих команд, роль readonly будет иметь права только на чтение и доступ только на слейве. Если вы хотите дать доступ к конкретным таблицам, вы можете изменить команды GRANT SELECT, чтобы они отражали ваши требования.
Также не забудьте установить правильные учетные данные для соединения между мастером и слейвом, чтобы роль "slave" могла прочитать данные с мастера. Это можно сделать, например, через файл pg_hba.conf.
Важно отметить, что это дает роли только права на чтение и только со слейва. Это не ограничивает слейв от записи в базу данных. Если вам нужно ограничить и запись, вам следует использовать другие механизмы, такие как триггеры или хранимые процедуры, и настраивать их отдельно для мастера и слейва.