Como aplicar o PostgreSQL “GRANT ALL EM TODAS AS TABELAS” a novas tabelas?

4

Como discutido na pergunta em GRANT SELECT para todas as tabelas no postgresql , a partir do PG 9.0, você pode conceder privilégios em massa em todas as tabelas existentes para o usuário u, usando um comando como:

GRANT ALL ON ALL TABLES IN SCHEMA public TO u;

Conectado como u, você pode fazer isso agora com a tabela preexistente a:

SELECT * FROM a;

Mas agora, se você criar a tabela be fazer:

SELECT * FROM b;

Você recebe:

ERROR: permission denied for relation b
SQL state: 42501

Isso pode ser solucionado reexecutando

GRANT ALL ON ALL TABLES IN SCHEMA public TO u;

Mas é um problema ter que lembrar de fazer isso depois de cada vez que você cria uma tabela.

Existe uma maneira de fazer com que o PostgreSQL aplique essas concessões globais automaticamente a tabelas recém-criadas?

~ Agradecemos antecipadamente ~ Ken

    
por Ken 04.01.2015 / 19:34

1 resposta

6

Uma solução possível é alterar os privilégios padrão para u user:

Por exemplo:

alter default privileges in schema public grant all on tables to u;
alter default privileges in schema public grant all on sequences to u;

Description

ALTER DEFAULT PRIVILEGES allows you to set the privileges that will be applied to objects created in the future. (It does not affect privileges assigned to already-existing objects.) Currently, only the privileges for tables (including views), sequences, and functions can be altered.

You can change default privileges only for objects that will be created by yourself or by roles that you are a member of. The privileges can be set globally (i.e., for all objects created in the current database), or just for objects created in specified schemas. Default privileges that are specified per-schema are added to whatever the global default privileges are for the particular object type.

As explained under GRANT, the default privileges for any object type normally grant all grantable permissions to the object owner, and may grant some privileges to PUBLIC as well. However, this behavior can be changed by altering the global default privileges with ALTER DEFAULT PRIVILEGES.

veja: ALTERAR PRIVILÉGIOS PADRÃO

    
por 04.01.2015 / 20:08