REVOKE — отзыв привилегии доступа
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [ TABLE ] table_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON { SEQUENCE sequence_name [, ...]
| ALL SEQUENCES IN SCHEMA schema_name [, ...] }
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
ON DATABASE database_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN domain_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER fdw_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER server_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
| ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE lang_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECT loid [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] }
ON PARAMETER configuration_parameter [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
ON SCHEMA schema_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespace_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON TYPE type_name [, ...]
FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
REVOKE [ { ADMIN | INHERIT | SET } OPTION FOR ]
role_name [, ...] FROM role_specification [, ...]
[ GRANTED BY role_specification ]
[ CASCADE | RESTRICT ]
где role_specification может быть:
[ GROUP ] role_name
| PUBLIC
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER
REVOKE Команда отзывает ранее предоставленные привилегии у одной или нескольких ролей. Ключевое слово
PUBLIC относится к неявно определенной группе всех ролей.
См. описание команды GRANT команда для получения описания типов привилегий.
Обратите внимание, что любая конкретная роль обладает совокупностью привилегий, предоставленных ей непосредственно, привилегий, предоставленных любой роли, участником которой она является в настоящий момент, и привилегий, предоставленных
PUBLIC. Так, например, отзыв привилегии SELECT привилегию
у PUBLIC не обязательно означает, что все роли
лишились SELECT привилегии на объект: те, кому она предоставлена
напрямую или через другую роль, по-прежнему будут ею обладать. Аналогично, отзыв
SELECT у пользователя может не препятствовать использованию им
SELECT если PUBLIC или другая роль, в которой он состоит, все еще обладает SELECT правами.
Если GRANT OPTION FOR указано, отзывается только право передачи привилегии (grant option), но не сама привилегия. В противном случае отзываются и привилегия, и право передачи.
Если пользователь обладает привилегией с правом передачи и предоставил ее другим пользователям, то привилегии, полученные этими пользователями, называются зависимыми. Если привилегия или право передачи, которыми обладает первый пользователь, отзываются и при этом существуют зависимые привилегии, то эти зависимые привилегии также отзываются, если
CASCADE указано; в противном случае операция REVOKE завершится ошибкой. Данный рекурсивный отзыв затрагивает только те привилегии, которые были предоставлены через цепочку пользователей, прослеживаемую до пользователя, являющегося объектом этой REVOKE команды.
Таким образом, затронутые пользователи могут фактически сохранить привилегию, если она
также была предоставлена через других пользователей.
При отзыве привилегий на таблицу соответствующие привилегии на столбцы (если таковые имеются) также автоматически отзываются для каждого столбца таблицы. С другой стороны, если роли были предоставлены привилегии на таблицу, то отзыв тех же привилегий для отдельных столбцов не возымеет эффекта.
При отзыве членства в роли, GRANT OPTION вместо этого
называется ADMIN OPTION, но поведение аналогично.
Обратите внимание, что в версиях до Digital Q.DataBase 16
зависимые привилегии не отслеживались для предоставления членства в роли
и, следовательно, CASCADE не имели эффекта для членства в роли.
Теперь это не так.
Обратите внимание также на то, что эта форма команды не
допускает использование необязательного слова GROUP
в role_specification.
Так же как ADMIN OPTION может быть удалено из существующего
предоставления роли, также можно отозвать INHERIT OPTION
или SET OPTION. Это эквивалентно установке значения
соответствующего параметра в FALSE.
Пользователь может отозвать только те привилегии, которые были предоставлены непосредственно этим пользователем. Если, например, пользователь А предоставил привилегию с параметром GRANT OPTION пользователю B, а пользователь B, в свою очередь, предоставил её пользователю C, то пользователь А не может отозвать привилегию напрямую у C. Вместо этого пользователь А может отозвать GRANT OPTION у пользователя B и использовать CASCADE параметр, чтобы привилегия была, в свою очередь, отозвана у пользователя C. В качестве другого примера: если и A, и B предоставили одну и ту же привилегию C, A может отозвать своё предоставление, но не предоставление B, поэтому C всё равно будет фактически обладать этой привилегией.
Когда пользователь, не являющийся владельцем объекта, пытается REVOKE привилегий на объект; выполнение команды завершится ошибкой, если у пользователя полностью отсутствуют какие-либо привилегии на данный объект. До тех пор, пока доступна хотя бы одна привилегия, выполнение команды будет продолжено, но при этом будут отозваны только те привилегии, для которых у пользователя имеется право передачи (grant options). REVOKE ALL
PRIVILEGES формы выведут предупреждающее сообщение, если права передачи отсутствуют, в то время как другие формы выведут предупреждение, если права передачи не предоставлены для любой из привилегий, явно указанных в команде. (В принципе, эти положения применимы и к владельцу объекта, но поскольку считается, что владелец всегда обладает всеми правами передачи, такие случаи невозможны.)
Если суперпользователь решит выполнить команду GRANT или REVOKE
команда выполняется так, как если бы она была вызвана владельцем затрагиваемого объекта. (Поскольку роли не имеют владельцев, в случае GRANT членства в роли, команда выполняется так, как если бы она была инициирована изначальным суперпользователем (bootstrap superuser).) Поскольку все привилегии в конечном итоге исходят от владельца объекта (возможно, косвенно через цепочки параметров grant option), суперпользователь может отозвать все привилегии, но для этого может потребоваться использование CASCADE как указано выше.
REVOKE также может быть выполнено ролью,
не являющейся владельцем соответствующего объекта, но являющейся членом роли,
владеющей объектом, либо членом роли, обладающей привилегиями
WITH GRANT OPTION для данного объекта. В данном случае команда выполняется так, как если бы она была инициирована вышестоящей ролью, которая фактически владеет объектом или обладает привилегиями
WITH GRANT OPTION. Например, если таблица
t1 принадлежит роли g1, членом которой роль
u1 является, то u1 может отозвать привилегии
для t1 которые зафиксированы как предоставленные g1.
Сюда относятся права, предоставленные u1 а также другими участниками роли g1.
Если роль, выполняющая команду, REVOKE обладает привилегиями
косвенно через несколько путей членства в ролях, не определено,
какая именно из ролей будет использована для выполнения команды. В таких случаях
лучше всего использовать SET ROLE чтобы стать конкретной
ролью, от лица которой вы хотите выполнить REVOKE операцию. Несоблюдение этого правила может привести к отзыву привилегий, отличных от запланированных, либо к тому, что не будет отозвано ничего вовсе.
См. Раздел 2.2.8 для получения дополнительной информации о конкретных типах привилегий, а также о способах проверки привилегий объектов.
Отзыв привилегии на вставку для PUBLIC в таблице
films:
REVOKE INSERT ON films FROM PUBLIC;
Отзыв всех привилегий у пользователя manuel для представления
kinds:
REVOKE ALL PRIVILEGES ON kinds FROM manuel;
Обратите внимание, что фактически это означает «отозвать все привилегии, которые были предоставлены мной».
Отмена членства в роли admins у пользователя joe:
REVOKE admins FROM joe;
Примечания по совместимости для GRANT команды
применяются аналогично к REVOKE.
Ключевое слово RESTRICT или CASCADE
требуется в соответствии со стандартом, однако Digital Q.DataBase
подразумевает RESTRICT по умолчанию.