REVOKE — remove privilégios de acesso
REVOKE [ GRANT OPTION FOR ]
{ { SELECT
| INSERT
| UPDATE
| DELETE
| TRUNCATE
| REFERENCES
| TRIGGER
| MAINTAIN
}
[, ...]
| ALL [ PRIVILEGES ]
}
ON { [ TABLE ] nome_da_tabela [, ...]
| ALL TABLES IN SCHEMA nome_do_esquema [, ...]
}
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT
| INSERT
| UPDATE
| REFERENCES
}
( nome_da_coluna [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( nome_da_coluna [, ...] ) }
ON [ TABLE ] nome_da_tabela [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ 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 especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE
| CONNECT
| TEMPORARY
| TEMP
}
[, ...]
| ALL [ PRIVILEGES ]
}
ON DATABASE nome_do_banco_de_dados [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON DOMAIN nome_do_domínio [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN DATA WRAPPER nome_do_empacotador [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON FOREIGN SERVER nome_do_servidor [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ 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 especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE nome_da_linguagem [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECT id_de_objeto_grande [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SET | ALTER SYSTEM } [, ...] | ALL [ PRIVILEGES ] }
ON PARAMETER parâmetro_de_configuração [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
ON SCHEMA nome_do_esquema [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE nome_do_espaço_de_tabelas [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON TYPE nome_do_tipo_de_dados [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
REVOKE [ { ADMIN | INHERIT | SET } OPTION FOR ]
nome_da_role [, ...]
FROM especificação_da_role [, ...]
[ GRANTED BY especificação_da_role ]
[ CASCADE | RESTRICT ]
onde especificação_da_role pode ser:
[ GROUP ] nome_da_role
| PUBLIC
| CURRENT_ROLE
| CURRENT_USER
| SESSION_USER
O comando REVOKE revoga privilégios concedidos
anteriormente a uma ou mais funções de banco de dados
(roles)
[152]
[153].
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 este 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 estes
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, estes privilégios
dependentes também serão revogados se for especificado
CASCADE; se não for especificado, a ação de
revogar irá falhar.
Esta 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 a participação em uma função de banco de dados,
GRANT OPTION passa a se chamar
ADMIN OPTION, mas o comportamento é semelhante.
Note que, nas versões anteriores ao
PostgreSQL 16, os privilégios dependentes
não eram rastreados para concessões de participação em
funções de banco de dados e, portanto, CASCADE
não tinha efeito na participação em funções de banco de dados.
Isto já não acontece mais.
Note também que esta forma do comando não permite a palavra ruído
GROUP na
especificação_da_role.
Assim como o privilégio ADMIN OPTION pode ser
revogado para uma função de banco de dados existente, também é possível
revogar INHERIT OPTION ou SET OPTION.
Isto equivale a definir o valor da opção correspondente como
FALSE.
Um usuário só pode revogar privilégios que foram concedidos
diretamente por este 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, estas 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 as funções de banco de dados não têm donos, no caso de um
comando GRANT de associação a uma
função de banco de dados, o comando é executado como se tivesse
sido submetido pelo superusuário de inicialização.)
Como todos os privilégios provêm, em última instância, do dono do
objeto (possivelmente de forma indireta por meio de cadeias de
opções de concessão), é possível que um superusuário revogue todos
os privilégios, mas isto pode exigir o uso de
CASCADE, conforme mencionado 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.
Neste 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.
Isto 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 isto 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.
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 isto 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;
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.
[152]
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.)
[153]
O comando REVOKE permite que usuários autorizados
revoguem privilégios concedidos anteriormente a outros usuários.
IBM DB2 12.1.x – Revoking privileges (N. T.)