Я тестирую разрешения базы данных на PostgreSQL и пытаюсь запретить обычному пользователю (читающему) выполнить инструкцию ALTER DEFAULT PRIVILEGES. Однако я не могу найти способ отозвать это конкретное разрешение и ничего не могу найти об этом в документации.
Я запустил локальный экземпляр PostgreSQL 11.2, удалил разрешения на подключение, создал базу данных testdb и отменил создание таблицы в схеме public.
revoke connect on database postgres from public;
create database testdb with template template0 --lc_collate "pt_BR.utf8" lc_ctype "pt_BR.utf8";
revoke connect on database testdb from public;
\c :database
revoke all on schema public from public;
grant all on schema public to postgres;
create schema private;
После этого я создал пользователя с правами только на чтение:
create user readuser
with nosuperuser
nocreatedb
nocreaterole
noreplication
login
encrypted password 'testpassword';
grant connect
on database testdb
to readuser;
Затем создайте схему testschema и предоставьте права на чтение ее таблиц:
grant usage
on schema testschema
to readuser;
grant select
on all tables
in schema testschema
to readuser;
Несмотря на то, что я установил разрешения на чтение только для всех схем и таблиц, пользователь «readuser» все равно может выполнить запрос «изменить привилегии по умолчанию» без ошибки разрешения:
alter default privileges in schema testschema grant select on tables to readuser;
ALTER DEFAULT PRIVILEGES
Мне нужна помощь в предотвращении изменения пользователем своих привилегий по умолчанию, чтобы он не мог испортить разрешения для таблиц, созданных в будущем.