Estou tentando configurar um usuário com permissões limitadas que poderiam criar tabelas estrangeiras. Eu tenho dois bancos de dados hr_db
e accounting_db
. Eu criei um hr_user
usuário para hr_db
e um accounting_user
usuário para accounting_db
. Eu só quero que o accounting_user
usuário tenha direitos de seleção em algumas hr_db
tabelas, como a users
tabela. Para fazer isso, como superusuário, fui ao hr_db
banco de dados e executei:
GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;
Eu configurar uma conexão a hr_db
partir de accounting_db
utilizar um invólucro de dados externa:
CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'hr_db', port '5432');
Adicionei um mapeamento para o accounting_user
usuário:
CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');
A senha para accounting_user
é a mesma que eu uso para efetuar login na linha de comando. Isso funciona bem:
psql -U accounting_user -W hr_db
[enter accounting_user password]
SELECT * FROM people LIMIT 10;
Eu posso criar uma tabela regular no accounting_db
banco de dados como o accounting_user
usuário:
psql -U accounting_user -W accounting_db
[enter accounting_user password]
CREATE TABLE test (person_id integer NOT NULL);
DROP TABLE test;
Mas se eu tentar criar uma tabela estrangeira:
CREATE FOREIGN TABLE hr_people (person_id integer NOT NULL)
SERVER hr_db OPTIONS (table_name 'people');
ERROR: permission denied for foreign server hr_db
Como superusuário, posso criar a hr_people
tabela estrangeira e accounting_user
ela terá acesso a ela. Portanto, a conexão de dados externos hr_db
parece correta. O que mais preciso fornecer accounting_user
para que seja possível criar e eliminar tabelas estrangeiras?
ERROR: only superuser can change options of a file_fdw foreign table
agora ... ☹️