REVOKE

REVOKE — отозвать права доступа

Синтаксис

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] имя_таблицы [, ...]
         | ALL TABLES IN SCHEMA имя_схемы [, ...] }
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | REFERENCES } ( имя_столбца [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( имя_столбца [, ...] ) }
    ON [ TABLE ] имя_таблицы [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE имя_последовательности [, ...]
         | ALL SEQUENCES IN SCHEMA имя_схемы [, ...] }
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE имя_базы_данных [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN имя_домена [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER имя_обертки_сторонних_данных [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER имя_сервера [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { { FUNCTION | PROCEDURE | ROUTINE } имя_функции [ ( [ [ режим_аргумента ] [ имя_аргумента ] тип_аргумента [, ...] ] ) ] [, ...]
         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA имя_схемы [, ...] }
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE имя_языка [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT oid_БО [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA имя_схемы [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE имя_табличного_пространства [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE имя_типа [, ...]
    FROM указание_роли [, ...]
    [ CASCADE | RESTRICT ]

REVOKE [ ADMIN OPTION FOR ]
    имя_роли [, ...] FROM указание_роли [, ...]
    [ GRANTED BY указание_роли ]
    [ CASCADE | RESTRICT ]

Где указание_роли:

    [ GROUP ] имя_роли
  | PUBLIC
  | CURRENT_USER
  | SESSION_USER

Описание

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

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

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

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

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

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

При отзыве членства в роли указание GRANT OPTION меняется на ADMIN OPTION, но поведение очень похоже. Эта форма команды также принимает указание GRANTED BY, но в настоящее время оно игнорируется (за исключением проверки указанной в нем роли). Также обратите внимание, что эта форма команды не принимает избыточное слово GROUP в указании_роли.

Примечания

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

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

Если суперпользователь запускает команду GRANT или REVOKE, она выполняется так, как если бы была запущена владельцем заданного объекта. Поскольку все права в конечном счете исходят от владельца объекта (возможно, косвенно через цепочки или через право распоряжением правом), суперпользователь может отозвать все права, но это может потребовать использования CASCADE, как уже говорилось выше.

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

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

Дополнительную информацию о конкретных типах прав, а также о том, как проверять права объектов, см. в разделе Права.

Примеры

Удаление у группы 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, но QHB предполагает RESTRICT по умолчанию.

См. также

GRANT, ALTER DEFAULT PRIVILEGES