Как запретить пользователю выполнять запрос 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;