Eu tenho um usuário e um banco de dados de "produção" no qual desejo dar acesso correto a todos os usuários pertencentes a um grupo de produção.
Infelizmente não consigo, mantendo o erro de acesso negado.
Você pode dar uma olhada no script de exemplo abaixo e me dizer o que eu perdi (o usuário/banco de dados de produção é toto
e o grupo de produção é toto_group
)?
Alguns comentários:
- O caso de uso é: O carregamento de dados já está em produção. Os desenvolvedores (
titi
, etc.) agora só precisam ler os dados e queremos que eles os leiam do banco de dados de produção para evitar a duplicação de tudo. - Inicialmente tentei no Linux, mas fiz o script de teste no Windows. Mesmos resultados.
- Estou usando o postgresql 9.5
- Também tentei conceder acesso às tabelas em vez do esquema. Mesmos resultados.
Muito obrigado.
\c postgres postgres
DROP DATABASE IF EXISTS toto;
DROP TABLESPACE IF EXISTS toto_ts;
DROP ROLE IF EXISTS toto;
DROP DATABASE IF EXISTS titi;
DROP TABLESPACE IF EXISTS titi_ts;
DROP ROLE IF EXISTS titi;
DROP ROLE IF EXISTS toto_group;
CREATE ROLE toto_group NOLOGIN;
CREATE ROLE toto WITH PASSWORD 'toto' LOGIN;
CREATE TABLESPACE toto_ts OWNER toto LOCATION 'd:/pg_ts/toto';
CREATE DATABASE toto TABLESPACE=toto_ts TEMPLATE=template0 OWNER=toto;
GRANT toto_group TO toto;
CREATE ROLE titi WITH PASSWORD 'titi' LOGIN;
CREATE TABLESPACE titi_ts OWNER titi LOCATION 'd:/pg_ts/titi';
CREATE DATABASE titi TABLESPACE=titi_ts TEMPLATE=template0 OWNER=titi;
GRANT toto_group TO titi;
COMMIT;
\c toto
DROP SCHEMA public;
CREATE SCHEMA s_test;
SET SCHEMA 's_test';
GRANT SELECT ON ALL TABLES IN SCHEMA s_test TO toto_group;
CREATE TABLE t_test (id INTEGER);
COMMIT;
\c titi
DROP SCHEMA public;
CREATE SCHEMA s_test;
SET SCHEMA 's_test';
GRANT SELECT ON ALL TABLES IN SCHEMA s_test TO toto_group;
CREATE TABLE t_test (id INTEGER);
COMMIT;
Você também deve conceder acesso ao banco de dados e a
SCHEMA
si mesmo: