Postgres: Только суперпользователь и владелец могут создавать резервные копии / дампы? - PullRequest
0 голосов
/ 08 апреля 2020

Итак, я создал пользователя исключительно для резервного копирования. Когда я выполнил команду dump, произошла ошибка ниже:

pg_dump: [archiver (db)] query failed: ERROR:  permission denied for table {{tableName}}
pg_dump: [archiver (db)] query was: LOCK TABLE public.{{tableName}} IN ACCESS SHARE MODE

В настоящее время Владелец является postgres пользователем для соответствующей таблицы.

I sh для использования эксклюзивного резервного пользователя, который имеет только доступ SELECT. Ниже приведены привилегии для роли, назначенной пользователю

CREATE ROLE {{roleName}};
\c {{databaseName}};
GRANT USAGE ON SCHEMA public TO {{roleName}};
GRANT SELECT ON ALL TABLES IN SCHEMA public TO {{roleName}};
GRANT SELECT ON ALL SEQUENCES IN SCHEMA mySchema TO {{roleName}};
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO {{roleName}};

1 Ответ

1 голос
/ 08 апреля 2020

Я нашел только в документации https://www.postgresql.org/docs/12/backup-dump.html:

Но помните, что pg_dump не работает со специальными разрешениями. В частности, он должен иметь доступ на чтение ко всем таблицам, для которых вы хотите выполнить резервное копирование, поэтому для резервного копирования всей базы данных вам почти всегда нужно запускать ее как суперпользователь базы данных. (Если у вас недостаточно прав для резервного копирования всей базы данных, вы все равно можете выполнить резервное копирование тех частей базы данных, к которым у вас есть доступ, используя такие параметры, как -n схема или -t таблица.)

И очень старое сообщение в списке рассылки postgresql: https://www.postgresql.org/message-id/18014.1075821674%40sss.pgh.pa.us:

pg_dump обычно должно запускаться суперпользователем базы данных. Все, что меньше, создает проблемы из-за невозможности выгрузить вещи, которые ему не принадлежат.

Вы можете попытаться создать пользователя с меньшими привилегиями, чем вы: if pg_dump и pg_restore успешен, тогда все должно быть в порядке.

...