REVOKE

Удаление прав доступа.

Синтаксис

REVOKE [GRANT OPTION FOR] { {SELECT | INSERT | UPDATE | DELETE
        | REFERENCES | TRIGGER | TRUNCATE } [, ...] | ALL [PRIVILEGES] }

        ON { [TABLE] table_name [, ...]
            | ALL TABLES IN SCHEMA schema_name [, ...] }
        FROM { [ GROUP ] role_name | PUBLIC} [, ...]
        [CASCADE | RESTRICT]

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE
       | REFERENCES } ( column_name [, ...] )
       [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
       ON [ TABLE ] table_name [, ...]
       FROM { [ GROUP ]  role_name | PUBLIC } [, ...]
       [ CASCADE | RESTRICT ]

REVOKE [GRANT OPTION FOR] { {USAGE | SELECT | UPDATE} [,...]
       | ALL [PRIVILEGES] }
       ON { SEQUENCE sequence_name [, ...]
            | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
       FROM { [ GROUP ] role_name | PUBLIC } [, ...]
       [CASCADE | RESTRICT]

REVOKE [GRANT OPTION FOR] { {CREATE | CONNECT
       | TEMPORARY | TEMP} [, ...] | ALL [PRIVILEGES] }
       ON DATABASE database_name [, ...]
       FROM { [ GROUP ] role_name | PUBLIC} [, ...]
       [CASCADE | RESTRICT]

REVOKE [ GRANT OPTION FOR ]
       { USAGE | ALL [ PRIVILEGES ] }
       ON DOMAIN domain_name [, ...]
       FROM { [ GROUP ] role_name | PUBLIC } [, ...]
       [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
       { USAGE | ALL [ PRIVILEGES ] }
       ON FOREIGN DATA WRAPPER fdw_name [, ...]
       FROM { [ GROUP ] role_name | PUBLIC } [, ...]
       [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
       { USAGE | ALL [ PRIVILEGES ] }
       ON FOREIGN SERVER server_name [, ...]
       FROM { [ GROUP ] role_name | PUBLIC } [, ...]
       [ CASCADE | RESTRICT ]

REVOKE [GRANT OPTION FOR] {EXECUTE | ALL [PRIVILEGES]}
       ON { FUNCTION funcname ( [[argmode] [argname] argtype
                                                 [, ...]] ) [, ...]
            | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
       FROM { [ GROUP ] role_name | PUBLIC} [, ...]
       [CASCADE | RESTRICT]

REVOKE [GRANT OPTION FOR] {USAGE | ALL [PRIVILEGES]}
       ON LANGUAGE langname [, ...]
       FROM { [ GROUP ]  role_name | PUBLIC} [, ...]
       [ CASCADE | RESTRICT ]

REVOKE [GRANT OPTION FOR] { {CREATE | USAGE} [, ...]
       | ALL [PRIVILEGES] }
       ON SCHEMA schema_name [, ...]
       FROM { [ GROUP ] role_name | PUBLIC} [, ...]
       [CASCADE | RESTRICT]

REVOKE [GRANT OPTION FOR] { CREATE | ALL [PRIVILEGES] }
       ON TABLESPACE tablespacename [, ...]
       FROM { [ GROUP ] role_name | PUBLIC } [, ...]
       [CASCADE | RESTRICT]

REVOKE [ GRANT OPTION FOR ]
       { USAGE | ALL [ PRIVILEGES ] }
       ON TYPE type_name [, ...]
       FROM { [ GROUP ] role_name | PUBLIC } [, ...]
       [ CASCADE | RESTRICT ]

REVOKE [ADMIN OPTION FOR] parent_role [, ...]
       FROM [ GROUP ] member_role [, ...]
       [CASCADE | RESTRICT]

Описание

Команда REVOKE отменяет ранее предоставленные привилегии одной или нескольким ролям. Ключевое слово PUBLIC обозначает неявно определённую группу всех ролей.

Описание типов привилегий см. в описании команды GRANT.

Обратите внимание, что конкретная роль будет иметь сумму привилегий, предоставленных ей напрямую, привилегий, предоставленных всем ролям, членом которых она является, и привилегий, предоставленных PUBLIC. Таким образом, например, отмена привилегий SELECT у PUBLIC не обязательно означает, что все роли потеряют привилегию SELECT к данному объекту: те, кто получил её напрямую или через другие роли, по-прежнему будут иметь эту привилегию. Аналогично, отмена SELECT у пользователя может не помешать ему использовать SELECT, если у PUBLIC или других ролей, в которые он входит, всё ещё есть привилегия SELECT.

Если указано GRANT OPTION FOR, то отменяется только возможность передачи привилегии (grant option), но не сама привилегия. В противном случае будут отменены как привилегии, так и возможность их передачи.

Если у роли есть привилегии с опцией «Grant» и она предоставила их другим ролям, то привилегии, принадлежащие этим другим ролям, называются «подчинёнными привилегиями». Если привилегии или опции передачи, принадлежащие первой роли, отменяются, и существуют подчинённые привилегии, то эти подчинённые привилегии также будут отменены при указании CASCADE; в противном случае операция отмены завершится ошибкой. Такая рекурсивная отмена влияет только на привилегии, предоставленные по цепочке ролей, восходящей к ролям, связанным с объектом данной команды REVOKE. Следовательно, если привилегии также были предоставлены через другие роли, затронутая роль может фактически сохранить привилегии.

При отмене привилегий к таблице YMatrix также отменяет соответствующие привилегии по столбцам этой таблицы (если они были). С другой стороны, если роли были предоставлены привилегии на таблицу, отмена тех же привилегий для отдельного столбца будет недействительной.

При отмене членства в роли параметр GRANT OPTION заменяется на ADMIN OPTION, но поведение остаётся аналогичным.

Параметры

См. GRANT

Примечания

Пользователь может отменять только те привилегии, которые были им непосредственно предоставлены. Например, если пользователь A предоставил пользователю B привилегию с опцией передачи, а пользователь B, в свою очередь, предоставил её пользователю C, то пользователь A не может напрямую отменить привилегию у C. Вместо этого пользователь A может отменить опцию передачи у пользователя B и использовать опцию CASCADE, чтобы последовательно отменить привилегии у пользователя C. Например, если и A, и B предоставили одинаковые привилегии C, A может отменить своё собственное предоставление, но не может отменить предоставление B, поэтому C фактически по-прежнему будет иметь привилегии.

Когда владелец объекта пытается выполнить REVOKE привилегий к объекту, команда полностью завершится ошибкой, если у пользователя нет никаких привилегий к этому объекту. Команда продолжит выполнение, если у пользователя есть некоторые привилегии, но отменит только те привилегии, для которых у пользователя есть опция передачи. Если опция передачи не сохранена, форма REVOKE ALL PRIVILEGES выдаст предупреждение; если опция передачи не сохранена ни для одной из явно указанных в команде привилегий, другие формы команды также выдадут предупреждение. (В принципе, эти правила применяются и к владельцам объектов, но это никогда не происходит, поскольку YMatrix всегда считает владельца объекта обладателем всех опций передачи.)

REVOKE также может быть вызван членом, который не является владельцем затрагиваемого объекта, но является владельцем роли объекта или членом роли, имеющей привилегии WITH GRANT OPTION на объект. В этом случае YMatrix выполняет команду так, будто она была выдана ролью, включённой пользователем, который фактически владеет объектом или имеет привилегии WITH GRANT OPTION. Например, если таблица t1 принадлежит роли g1, а роль u1 является её членом, то u1 может отменять привилегии, предоставленные g1 на t1. Это включает авторизации, сделанные u1 и другими членами роли g1.

Если роль, выполняющая REVOKE, получает привилегии косвенно через несколько путей членства в ролях, нельзя заранее определить, какая именно роль будет использована для выполнения команды. В этом случае рекомендуется использовать команду SET ROLE, чтобы стать конкретной ролью, от имени которой будет выполняться REVOKE. В противном случае может произойти отмена не тех привилегий, которые планировались, либо вообще не произойти отмены.

Используйте метакоманду \dp в psql для получения информации о существующих привилегиях для таблиц и столбцов. Также можно использовать другие метакоманды \d для отображения привилегий для объектов, не являющихся таблицами.

Примеры

Отменить привилегию на вставку в таблицу films у группы PUBLIC:

REVOKE INSERT ON films FROM PUBLIC;

Sally отменяет все привилегии у роли в представлении topten. Обратите внимание, что это фактически означает отмену всех привилегий, предоставленных текущей ролью (если она не является суперпользователем).

REVOKE ALL PRIVILEGES ON topten FROM sally;

Отменить членство пользователя joe в роли admins:

REVOKE admins FROM joe;

Совместимость

Описание совместимости для команды GRANT применимо и к REVOKE.

Согласно стандарту, требуется указывать RESTRICT или CASCADE, однако по умолчанию YMatrix предполагает RESTRICT.

Смотрите также

GRANT