Отзыв прав, предоставленных другим пользователем в PostgreSQL

В PostgreSQL, когда суперпользователь предоставляет какие-либо права (например, GRANT SELECT ON TABLE имя_таблицы), только указанный SU может отозвать их.

Есть ли способ, которым другой суперпользователь может отозвать указанные гранты?

РЕДАКТИРОВАТЬ: Вот пример запроса, который я запускаю: ALTER DEFAULT PRIVILEGES IN SCHEMA my_schema REVOKE SELECT ON TABLES FROM public CASCADE; Однако указанная привилегия по умолчанию все еще отображается, когда я смотрю на схему, даже после обновления всего. Я запускал его как с моей учетной записью суперпользователя, так и с учетной записью postgres, ни один из них не работал.


person Arthur    schedule 15.05.2015    source источник


Ответы (1)


Из документации:

Если суперпользователь выбирает команду GRANT или REVOKE, команда выполняется так, как если бы она была введена владельцем затронутого объекта.

Таким образом, ЛЮБОЙ суперпользователь может отозвать привилегии, даже предоставленные другими суперпользователями.

Вы можете использовать команду ALTER DEFAULT PRIVILEGES, чтобы установить начальный привилегии (те, которые назначаются при создании объекта) на что-то отличное от привилегий PostgreSQL по умолчанию. Однако выполнение этой команды влияет только (из документации):

привилегии, которые будут применяться к объектам, созданным в будущем. (Это не влияет на привилегии, назначенные уже существующим объектам.)

Для изменения привилегий существующих объектов требуются отдельные GRANT и REVOKE, хотя вы также можете применять такие сочетания клавиш, как:

{GRANT | REVOKE} [privileges] ON ALL TABLES IN SCHEMA [schema name];

и аналогично для последовательностей и функций.

person Patrick    schedule 16.05.2015
comment
Вот код, который я запускаю: ALTER DEFAULT PRIVILEGES IN SCHEMA my_schema REVOKE SELECT ON TABLES FROM public CASCADE; И тем не менее, public по-прежнему показывается как имеющая привилегию выбора по умолчанию для всех таблиц. - person Arthur; 18.05.2015