REVOKE#

REVOKE

REVOKE

REVOKE — удаление прав доступа

Синтаксис

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | 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 OPTION FOR ]
    role_name [, ...] FROM role_specification [, ...]
    [ GRANTED BY role_specification ]
    [ CASCADE | RESTRICT ]

where role_specification can be:

    [ GROUP ] role_name
  | PUBLIC
  | CURRENT_ROLE
  | CURRENT_USER
  | SESSION_USER

Описание

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

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

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

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

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

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

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

Примечания

Пользователь может отозвать только привилегии, которые были предоставлены непосредственно этим пользователем. Например, если пользователь A предоставил привилегию с опцией предоставления пользователю B, а пользователь B в свою очередь предоставил ее пользователю C, то пользователь A не может отозвать привилегию напрямую у пользователя C. Вместо этого пользователь A может отозвать опцию предоставления у пользователя B и использовать опцию CASCADE, чтобы привилегия была отозвана у пользователя C. В другом примере, если и A, и B предоставили одну и ту же привилегию пользователю C, A может отозвать свое собственное предоставление, но не предоставление B, поэтому 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. Не выполнение этого действия может привести к отзыву привилегий, отличных от задуманных, или вообще не привести к отзыву ничего.

См. Раздел 5.7 для получения дополнительной информации о конкретных типах привилегий, а также о том, как проверить привилегии объектов.

Примеры

Отменить привилегию на вставку для общедоступного пользователя на таблицу 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 требуется согласно стандарту, но Tantor SE по умолчанию использует RESTRICT.