Usando pg 13.4
, criei um usuário readonlyreader
para database abc
, via:
CREATE ROLE reader WITH LOGIN PASSWORD 'psssswwwd'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION VALID UNTIL 'infinity';
GRANT CONNECT ON DATABASE abc TO reader;
GRANT USAGE ON SCHEMA public TO reader;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO reader;
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO reader;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO reader;
Mas o usuário ainda pode criar uma tabela, inserir e descartar essa tabela.
Eu quero que o usuário não consiga fazer nenhuma alteração em qualquer um dos bancos de dados na pg e só possa conectar e ler o banco de dados abc
.
Eu verifiquei https://stackoverflow.com/questions/24332588/read-only-user-able-to-create-table e
tentei: REVOKE CREATE ON SCHEMA public FROM reader;
mas ainda pode criar table.
Alguma sugestão? Obrigado.
A
REVOKE
instrução que você executou revogou um privilégio que nunca foi concedido, então não faz nada.Se você der uma olhada nas permissões, verá que o esquema
public
concedeuCREATE
aPUBLIC
(ou seja, todos), então é isso que você terá que revogar:Então você tem que conceder
CREATE
ao papel que deve criar objetos nesse esquema.