ALTER DEFAULT PRIVILEGES — define os privilégios de acesso padrão
ALTER DEFAULT PRIVILEGES
[ FOR { ROLE | USER } role_alvo [, ...] ]
[ IN SCHEMA nome_do_esquema [, ...] ]
grant_ou_revoke_abreviado
onde grant_ou_revoke_abreviado é um entre:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
[, ...] | ALL [ PRIVILEGES ] }
ON TABLES
TO { [ GROUP ] nome_da_role | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SEQUENCES
TO { [ GROUP ] nome_da_role | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON { FUNCTIONS | ROUTINES }
TO { [ GROUP ] nome_da_role | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON TYPES
TO { [ GROUP ] nome_da_role | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { USAGE | CREATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SCHEMAS
TO { [ GROUP ] nome_da_role | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECTS
TO { [ GROUP ] nome_da_role | PUBLIC } [, ...] [ WITH GRANT OPTION ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | MAINTAIN }
[, ...] | ALL [ PRIVILEGES ] }
ON TABLES
FROM { [ GROUP ] nome_da_role | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SEQUENCES
FROM { [ GROUP ] nome_da_role | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON { FUNCTIONS | ROUTINES }
FROM { [ GROUP ] nome_da_role | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON TYPES
FROM { [ GROUP ] nome_da_role | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | CREATE }
[, ...] | ALL [ PRIVILEGES ] }
ON SCHEMAS
FROM { [ GROUP ] nome_da_role | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | UPDATE }
[, ...] | ALL [ PRIVILEGES ] }
ON LARGE OBJECTS
FROM { [ GROUP ] nome_da_role | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
O comando ALTER DEFAULT PRIVILEGES permite definir
os privilégios que serão aplicados aos objetos criados no futuro.
(Não afeta os privilégios atribuídos a objetos já existentes.)
Os privilégios podem ser definidos globalmente (ou seja, para todos
os objetos criados no banco de dados corrente) ou apenas para objetos
criados em esquemas específicos.
Embora se possa alterar os próprios privilégios padrão e os padrões das funções de banco de dados (roles) das quais se é membro, no momento da criação de um objeto as permissões de um novo objeto são afetadas apenas pelos privilégios padrão da função de banco de dados corrente, e não são herdadas de nenhuma função de banco de dados da qual a função de banco de dados corrente seja membro.
Como explicado na Privilégios, os privilégios padrão
para qualquer tipo de objeto normalmente concedem todas as permissões
que podem ser concedidas ao dono do objeto, e também podem conceder
alguns privilégios para PUBLIC.
Entretanto, este comportamento pode ser mudado alterando os
privilégios padrão globais com o comando
ALTER DEFAULT PRIVILEGES.
Atualmente, apenas os privilégios para esquemas, tabelas
(incluindo visões e tabelas estrangeiras), sequências, funções, tipos
de dados (incluindo domínios) e objetos grandes podem ser alterados.
Para este comando, as funções incluem agregações e procedimentos.
As palavras FUNCTIONS e ROUTINES
são equivalentes neste comando.
(Daqui em diante ROUTINES será o termo padrão
preferido para funções e procedimentos considerados em conjunto.
Em versões anteriores do PostgreSQL,
apenas a palavra FUNCTIONS era permitida.
Não é possível definir privilégios padrão para funções e
procedimentos separadamente.)
Privilégios padrão especificados por esquema são adicionados a
todos os privilégios padrão globais para o tipo de objeto específico.
Isto significa que não se pode revogar privilégios por esquema,
se eles foram concedidos globalmente (seja por padrão, ou por
um comando ALTER DEFAULT PRIVILEGES anterior
que não especificava um esquema).
O comando REVOKE por esquema, serve apenas para
reverter os efeitos de um GRANT por esquema
anterior.
role_alvo
Alterar os privilégios padrão para objetos criados pela
função de banco de dados de destino
(role_alvo), ou pela
função de banco de dados corrente, se não especificada.
nome_do_esquema
O nome de um esquema existente.
Se especificado, são alterados os privilégios padrão para os
objetos criados posteriormente neste esquema.
Se IN SCHEMA for omitido, serão alterados os
privilégios padrão globais.
O uso de IN SCHEMA não é permitido ao definir
privilégios para esquemas e objetos grandes, visto que esquemas
não podem ser aninhados e objetos grandes não pertencem a um esquema.
nome_da_role
O nome da função de banco de dados existente, para conceder
ou revogar privilégios.
Este parâmetro, e todos os outros parâmetros em
grant_ou_revoke_abreviado,
agem conforme descrito em GRANT ou
REVOKE, exceto por definir permissões para
toda uma classe de objetos, em vez de para objetos específicos.
O meta-comando \ddp do psql
mostra informações sobre atribuições existentes de privilégios padrão.
O significado dos privilégios de acesso mostrados é o mesmo explicado
para \dp na Privilégios.
Se for desejado remover uma função de banco de dados
(role) para a qual os privilégios
padrão foram alterados, é necessário reverter as alterações em seus
privilégios padrão, ou usar DROP OWNED BY para
remover a entrada de privilégios padrão para a
função de banco de dados.
Conceder o privilégio SELECT a todos, para todas
as tabelas (e visões) a serem criadas posteriormente no esquema
meu_esquema, permitindo que a
função de banco de dados webuser insira dados
nelas também:
ALTER DEFAULT PRIVILEGES IN SCHEMA meu_esquema
GRANT SELECT ON TABLES TO PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA meu_esquema
GRANT INSERT ON TABLES TO webuser;
Desfazer o que foi feito acima, para que as tabelas criadas posteriormente não tenham mais permissões do que o normal:
ALTER DEFAULT PRIVILEGES IN SCHEMA meu_esquema
REVOKE SELECT ON TABLES FROM PUBLIC;
ALTER DEFAULT PRIVILEGES IN SCHEMA meu_esquema
REVOKE INSERT ON TABLES FROM webuser;
Remover a permissão EXECUTE para todos, que
normalmente é concedida a funções, para todas as funções criadas
posteriormente pela função de banco de dados admin:
ALTER DEFAULT PRIVILEGES FOR ROLE admin
REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
Note, no entanto, que não se pode realizar
este objetivo com um comando limitado a um único esquema.
Este comando não tem efeito, a menos que esteja desfazendo um
GRANT correspondente:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
REVOKE EXECUTE ON FUNCTIONS FROM PUBLIC;
Isto ocorre porque os privilégios padrão por esquema podem apenas adicionar privilégios à configuração global, e não remover privilégios concedidos por ela.
Não existe o comando ALTER DEFAULT PRIVILEGES
no padrão SQL.