Как запретить пользователю выполнять запрос COPY в POSTGRESQL?

Мне нужно запретить пользователю в pgsql выполнять оператор копирования. Я могу запретить выполнение любых операций CRUD.

1 ответ

Решение

COPY Команда может читать из таблицы куда-либо или из таблицы (из файла, другой таблицы или из запроса).

Я предполагаю, что вы хотите ограничить запись любой таблицей.

В этом случае просто ограничьте операции UPDATE/INSERT/DELETE для этого пользователя:

revoke insert, delete, update on all tables in schema public from xxx;

Дважды проверьте, что ваш пользователь не является суперпользователем (в этом случае все проверки разрешений просто игнорируются; так что если это так, просто alter role xxx nosuperuser;).

Также стоит определить стратегию по умолчанию для всех новых таблиц, отменив права на запись из этой роли:

alter default privileges in schema public
  revoke insert,update,delete on tables from xxx;

Если вы хотите ограничить чтение с помощью COPY из любой таблицы (например, copy (select * from table1) to stdout;), вам также необходимо отменить доступ на чтение (то есть разрешение SELECT) для всех объектов.

Обратите внимание, что есть вариант COPY, который, тем не менее, будет работать - если он читает "из ниоткуда", то есть:

copy (select 'blabla') to stdout;

или же

copy (values('blabla')) to stdout;

или, еще более экстремальная версия, читая "ничего":

copy (select) to stdout;
Другие вопросы по тегам