REVOKE

REVOKE — remove privilégios de acesso

Sinopse

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] nome_da_tabela [, ...]
         | ALL TABLES IN SCHEMA nome_do_esquema [, ...] }
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | REFERENCES } ( nome_da_coluna [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( nome_da_coluna [, ...] ) }
    ON [ TABLE ] nome_da_tabela [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE nome_da_sequência [, ...]
         | ALL SEQUENCES IN SCHEMA nome_do_esquema [, ...] }
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE nome_do_banco_de_dados [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN nome_do_domínio [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER nome_do_empacotador_de_dados_estrangeiros [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER nome_do_servidor [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { { FUNCTION | PROCEDURE | ROUTINE } nome_da_função [ ( [ [ modo_do_argumento ] [ nome_do_argumento ] tipo_de_dados_do_argumento [, ...] ] ) ] [, ...]
         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA nome_do_esquema [, ...] }
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE nome_da_linguagem [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT oid_de_objeto_grande [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA nome_do_esquema [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE nome_do_espaço_de_tabelas [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE nome_do_tipo_de_dados [, ...]
    FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

REVOKE [ ADMIN OPTION FOR ]
    nome_da_role [, ...] FROM grupamento [, ...]
    [ GRANTED BY grupamento ]
    [ CASCADE | RESTRICT ]

onde grupamento pode ser:

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

Descrição

O comando REVOKE revoga privilégios concedidos anteriormente a uma ou mais funções de banco de dados (roles) [221] [222]. A palavra-chave PUBLIC refere-se ao grupo implicitamente definido de todas as funções de banco de dados.

Veja a descrição do comando GRANT, para conhecer o significado dos tipos de privilégio.

Note que uma determinada função de banco de dados terá a soma dos privilégios concedidos diretamente a ela, com os privilégios concedidos a qualquer função de banco de dados da qual seja atualmente um membro, e com os privilégios concedidos a PUBLIC. Assim, por exemplo, revogar o privilégio SELECT de PUBLIC não significa, necessariamente, que todas as funções de banco de dados não têm mais o privilégio SELECT no objeto: aquelas que receberam o privilégio diretamente, ou por meio de outra função de banco de dados, ainda o possuem. Da mesma forma, revogar o privilégio SELECT de um usuário não irá impedir que esse usuário use o comando SELECT, se PUBLIC, ou outra função de banco de dados da qual é membro, ainda possuir o privilégio SELECT no objeto.

Se for especificado GRANT OPTION FOR, será somente revogada a opção de concessão do privilégio, não o próprio privilégio. Caso contrário, tanto o privilégio quanto a opção de concessão seriam revogados.

Se um usuário possui um privilégio com opção de concessão, e o concedeu a outros usuários, os privilégios mantidos por esses outros usuários são chamados de privilégios dependentes. Se o privilégio, ou a opção de concessão, do primeiro usuário estiver sendo revogado, e existirem privilégios dependentes, esses privilégios dependentes também serão revogados se for especificado CASCADE; se não for especificado, a ação de revogar irá falhar. Essa revogação recursiva afeta apenas os privilégios que foram concedidos por meio de uma cadeia de usuários, rastreável ao usuário que é o objeto desse comando REVOKE. Assim, os usuários afetados ainda podem manter o privilégio, se este também foi concedido por meio de outros usuários.

Ao revogar privilégios em uma tabela, os privilégios de coluna correspondentes (se houver) também são revogados automaticamente em cada coluna da tabela. Por outro lado, se uma função de banco de dados tiver privilégios concedidos em uma tabela, revogar os mesmos privilégios de colunas individuais não terá efeito.

Ao revogar ser membro de uma função de banco de dados, a cláusula GRANT OPTION passa a se chamar ADMIN OPTION, mas o comportamento é semelhante. Essa forma do comando também permite a opção GRANTED BY, mas no momento essa opção é ignorada (exceto para verificar a existência da função de banco de dados especificada). Note, também, que essa forma do comando não permite a palavra ruído GROUP em grupamento.

Notas

Um usuário só pode revogar privilégios que foram concedidos diretamente por esse usuário. Se, por exemplo, o usuário A concedeu um privilégio com opção de concessão ao usuário B, e o usuário B, por sua vez, o concedeu ao usuário C, o usuário A não pode revogar o privilégio de C diretamente. Em vez disso, o usuário A pode revogar a opção de concessão do usuário B, e usar a opção CASCADE para que o privilégio seja revogado do usuário C. Para outro exemplo, se A e B concederam o mesmo privilégio a C, então A pode revogar sua própria concessão, mas não a concessão de B, portanto C ainda terá o privilégio.

Quando um não-dono de um objeto tenta revogar os privilégios no objeto, o comando irá falhar por completo se o usuário não tiver nenhum privilégio no objeto. Enquanto estiver disponível algum privilégio, o comando irá prosseguir, mas revogando apenas os privilégios para os quais o usuário tem opção de concessão. As formas de REVOKE ALL PRIVILEGES mostram uma mensagem de advertência se nenhuma opção de concessão estiver presente, enquanto as outras formas mostram uma advertência se a opção de concessão, para qualquer um dos privilégios especificamente indicados no comando, não estiver presente. (Em princípio, essas afirmações também se aplicam ao dono do objeto, mas como o dono é sempre tratado como detentor de todas as opções de concessão, os casos nunca podem ocorrer.)

Se um superusuário escolher executar o comando GRANT ou REVOKE, o comando será executado como se tivesse sido executado pelo dono do objeto afetado. Como todos os privilégios vêm do dono do objeto (possivelmente indiretamente por meio de cadeias de opção de concessão), é possível para um superusuário revogar todos os privilégios, mas isso pode requerer o uso de CASCADE conforme visto acima.

O comando REVOKE também pode ser executado por uma função de banco de dados (role) que não é a dona do objeto afetado, mas é membro da função que possui o objeto, ou é membro de uma função que possui privilégios WITH GRANT OPTION no objeto. Nesse caso, o comando é executado como se tivesse sido executado pela função que realmente possui o objeto, ou detém os privilégios WITH GRANT OPTION. Por exemplo, se a tabela t1 pertencer à função de banco de dados g1, da qual a função u1 é membro, então u1 pode revogar os privilégios em t1 registrados como tendo sido concedidos por g1. Isso incluiria as concessões feitas por u1, bem como por outros membros da função de banco de dados g1.

Se a função de banco de dados que executa o comando REVOKE detiver os privilégios necessários indiretamente, por meio de mais de um caminho para se tornar membro da função de banco de dados, não será especificada qual função de banco de dados contendo o privilégio será registrada como tendo executado o comando. Nesses casos, é uma prática recomendada usar o comando SET ROLE para se tornar a função de banco de dados específica pela qual se deseja executar o comando REVOKE. Deixar de fazer isso pode levar à revogação de privilégios diferentes dos pretendidos, ou levar a não revogar nada.

Veja Privilégios para obter mais informações sobre tipos específicos de privilégios, bem como sobre como inspecionar os privilégios dos objetos.

Exemplos

Revogar o privilégio de inserção para PUBLIC na tabela films:

REVOKE INSERT ON films FROM PUBLIC;

Revogar todos os privilégios do usuário manuel na visão kinds:

REVOKE ALL PRIVILEGES ON kinds FROM manuel;

Note que isso realmente significa revogar todos os privilégios que eu concedi.

Revogar o usuário joe ser membro da função de banco de dados admins:

REVOKE admins FROM joe;

Compatibilidade

As notas de compatibilidade do comando GRANT se aplicam de forma análoga a REVOKE. As palavras-chave RESTRICT ou CASCADE são obrigatórias segundo o padrão SQL, mas o PostgreSQL assume RESTRICT por padrão.

Veja também

GRANT, ALTER DEFAULT PRIVILEGES


[221] Use o comando REVOKE para: revogar privilégios de sistema de usuários e de funções de banco de dados (roles); revogar funções de banco de dados de usuários, de funções de banco de dados, e de unidades de programa; revogar privilégios de objeto, para um determinado objeto, de usuários e de funções de banco de dados. Oracle 21 – REVOKE (N. T.)

[222] O comando REVOKE permite que usuários autorizados revoguem privilégios concedidos anteriormente a outros usuários. IBM DB2 11.5 – Revoking privileges (N. T.)