Estou tentando configurar o RBAC no Postgres onde tenho um banco de dados e um esquema. Eu tenho alguns papéis provisioner
, service
, mydb_ro
, e mydb_rw
. Eu executei o seguinte para alterar os privilégios padrão
ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
GRANT SELECT ON TABLES TO mydb_ro; -- only read
ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
GRANT INSERT, UPDATE, DELETE, TRUNCATE ON TABLES TO mydb_rw; -- + write, TRUNCATE optional
ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
GRANT REFERENCES, TRIGGER ON TABLES TO mydb_rw; -- + TRIGGER
ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
GRANT USAGE, SELECT, UPDATE ON SEQUENCES TO mydb_rw; -- SELECT, UPDATE are optional
ALTER DEFAULT PRIVILEGES FOR ROLE provisioner IN SCHEMA mydb_schema
GRANT EXECUTE ON FUNCTIONS TO mydb_rw;
isso é o que eu vejo nos privilégios padrão
postgres@mydb=> \ddp
Default access privileges
┌─────────────┬──────────────────┬──────────┬─────────────────────────────────┐
│ Owner │ Schema │ Type │ Access privileges │
├─────────────┼──────────────────┼──────────┼─────────────────────────────────┤
│ provisioner │ mydb_schema │ function │ mydb_rw=X/provisioner │
│ provisioner │ mydb_schema │ sequence │ mydb_rw=rwU/provisioner │
│ provisioner │ mydb_schema │ table │ mydb_ro=r/provisioner ↵│
│ │ │ │ mydb_rw=awdDxt/provisioner │
└─────────────┴──────────────────┴──────────┴─────────────────────────────────┘
Mas quando estou logado como um usuário que tem a provisioner
função e crio uma tabela, um usuário que tem a service
função não pode vê-la. O que estou fazendo errado?
agora eu corri
GRANT mydb_ro TO mydb_rw;
GRANT mydb_rw TO service;
Mas isso não ajudou com o problema de permissão.
Ter o papel de 'provisionador' não é a mesma coisa que ser 'provisionador'.
Para que sua permissão padrão mostrada seja aplicada, você teria que criar o objeto como 'provisionador' (por exemplo,
SET ROLE provisioner;
antes de criar os objetos)