ALTER DEFAULT PRIVILEGES

ALTER DEFAULT PRIVILEGES — define os privilégios de acesso padrão

Sinopse

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 ]

Descrição

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.

Parâmetros

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.

Notas

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.

Exemplos

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.

Conformidade

Não existe o comando ALTER DEFAULT PRIVILEGES no padrão SQL.

Veja também

GRANT, REVOKE