Todos os comandos devem ser executados enquanto estiverem conectados ao cluster de banco de dados correto. Certifique-se disso.
Roles são objetos do banco de dados cluster . Todos os bancos de dados do mesmo cluster compartilham o conjunto de funções definidas. Privilégios são concedidos/revogados por banco de dados/esquema/tabela etc.
Uma função precisa de acesso ao banco de dados , obviamente. Isso é concedido a
PUBLIC
por padrão. Senão:GRANT CONNECT ON DATABASE my_db TO my_user;
Privilégios básicos para Postgres 14 ou posterior
O Postgres 14 adiciona as funções predefinidas sem login
pg_read_all_data
/ pg_write_all_data
.Eles têm
SELECT
/ INSERT
, UPDATE
, DELETE
privilégios para todos tabelas, visualizações e sequências. Mais USAGE
em esquemas. Podemos GRANT
participação nestas funções:GRANT pg_read_all_data TO my_user;
GRANT pg_write_all_data TO my_user;
Isto cobre todos os comandos básicos de DML (mas não DDL, e não alguns comandos especiais como
TRUNCATE
ou o EXECUTE
privilégio para funções!). O manual:
pg_read_all_data
Leia todos os dados (tabelas, visualizações, sequências), como se tivesseSELECT
direitos sobre esses objetos eUSAGE
direitos em todos os esquemas, mesmo sem tê-lo explicitamente. Esta função não tem o atributo de funçãoBYPASSRLS
definir. Se o RLS estiver sendo usado, um administrador pode desejar definirBYPASSRLS
em funções nas quais esta função éGRANT
ed para.
pg_write_all_data
Escreva todos os dados (tabelas, visualizações, sequências), como se tivesseINSERT
,UPDATE
eDELETE
direitos sobre esses objetos eUSAGE
direitos em todos os esquemas, mesmo sem tê-lo explicitamente. Esta função não possui o atributo de funçãoBYPASSRLS
definir. Se o RLS estiver sendo usado, um administrador pode desejar definirBYPASSRLS
em funções que esta função éGRANT
ed para.
Todos os privilégios sem usar funções predefinidas (qualquer versão do Postgres)
Os comandos devem ser executados enquanto estiverem conectados ao banco de dados correto. Certifique-se disso.
A função precisa (pelo menos) do
USAGE
privilégio no esquema . Novamente, se isso for concedido a PUBLIC
, você está coberto. Senão:GRANT USAGE ON SCHEMA public TO my_user;
Ou conceda
USAGE
em todos esquemas personalizados:DO
$$
BEGIN
-- RAISE NOTICE '%', ( -- use instead of EXECUTE to see generated commands
EXECUTE (
SELECT string_agg(format('GRANT USAGE ON SCHEMA %I TO my_user', nspname), '; ')
FROM pg_namespace
WHERE nspname <> 'information_schema' -- exclude information schema and ...
AND nspname NOT LIKE 'pg\_%' -- ... system schemas
);
END
$$;
Em seguida, todas as permissões para todas as tabelas (requer Postgres 9.0 ou posterior).
E não se esqueça das sequências (caso existam):
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO my_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO my_user;
Alternativamente, você pode usar o "Grant Wizard" do pgAdmin 4 para trabalhar com uma GUI.
Existem alguns outros objetos, o manual para
GRANT
tem a lista completa. A partir do Postgres 12:
privilégios em um objeto de banco de dados (tabela, coluna, exibição, tabela estrangeira, sequência, banco de dados, wrapper de dados estrangeiros, servidor externo, função, procedimento, linguagem procedural, esquema ou espaço de tabela)
Mas o resto raramente é necessário. Mais detalhes:
- Como gerenciar PRIVILÉGIOS PADRÃO para USUÁRIOS em um DATABASE versus SCHEMA?
- Conceder privilégios para um banco de dados específico no PostgreSQL
- Como conceder todos os privilégios nas visualizações a um usuário arbitrário
Considere atualizar para uma versão atual.