PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Conceda tudo em um esquema específico no banco de dados para uma função de grupo no PostgreSQL


Você encontrou o atalho para definir privilégios para todos os existentes tabelas no esquema fornecido. O manual esclarece:

(mas note que ALL TABLES considera-se que inclui visualizações e mesas estrangeiras ).

Minha ênfase em negrito. serial colunas são implementadas com nextval() em uma sequência como padrão de coluna e, citando o manual:

Para sequências, este privilégio permite o uso do currval e nextval funções.

Portanto, se houver serial colunas, você também desejará conceder USAGE (ou ALL PRIVILEGES ) em sequências
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;

Observação:as colunas de identidade no Postgres 10 ou posterior usam sequências implícitas que não exigem privilégios adicionais. (Considere atualizar serial colunas.)

E o novo objetos?


Você também estará interessado em DEFAULT PRIVILEGES para usuários ou esquemas:
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE          ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;

Isso define privilégios para objetos criados no futuro automaticamente - mas não para objetos pré-existentes.

Os privilégios padrão são somente aplicado a objetos criados pelo usuário alvo (FOR ROLE my_creating_role ). Se essa cláusula for omitida, o padrão será o usuário atual executando ALTER DEFAULT PRIVILEGES . Para ser explícito:
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;

Observe também que todas as versões do pgAdmin III têm um bug sutil e exibem privilégios padrão no painel SQL, mesmo que não se apliquem à função atual. Certifique-se de ajustar o FOR ROLE cláusula manualmente ao copiar o script SQL.