Estoy tratando de configurar un usuario con permisos limitados que pueda crear tablas externas. Tengo dos bases de datos hr_db
y accounting_db
. He creado un hr_user
usuario para hr_db
y un accounting_user
usuario para accounting_db
. Solo quiero que el accounting_user
usuario tenga derechos de selección en algunas hr_db
tablas, como la users
tabla. Para hacer esto, como superusuario fui a la hr_db
base de datos y ejecuté:
GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;
He creado una conexión a hr_db
partir de accounting_db
uso de un envoltorio de datos externa:
CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'hr_db', port '5432');
Luego agregué una asignación para el accounting_user
usuario:
CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');
La contraseña para accounting_user
es la misma que uso para iniciar sesión desde la línea de comandos. Esto funciona bien:
psql -U accounting_user -W hr_db
[enter accounting_user password]
SELECT * FROM people LIMIT 10;
Puedo crear una tabla regular en la accounting_db
base de datos como accounting_user
usuario:
psql -U accounting_user -W accounting_db
[enter accounting_user password]
CREATE TABLE test (person_id integer NOT NULL);
DROP TABLE test;
Pero si trato de crear una tabla extranjera:
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 superusuario, puedo crear la hr_people
tabla externa y accounting_user
tendré acceso a ella. Entonces, la conexión de datos foráneos hr_db
parece correcta. ¿Qué más necesito dar accounting_user
para que pueda crear y descartar tablas extranjeras?
fuente
ERROR: only superuser can change options of a file_fdw foreign table
ahora estoy recibiendo ... ☹️