Permiso denegado para servidor externo

8

Estoy tratando de configurar un usuario con permisos limitados que pueda crear tablas externas. Tengo dos bases de datos hr_dby accounting_db. He creado un hr_userusuario para hr_dby un accounting_userusuario para accounting_db. Solo quiero que el accounting_userusuario tenga derechos de selección en algunas hr_dbtablas, como la userstabla. Para hacer esto, como superusuario fui a la hr_dbbase 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_dbpartir de accounting_dbuso 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_userusuario:

CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');

La contraseña para accounting_useres 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_dbbase de datos como accounting_userusuario:

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_peopletabla externa y accounting_usertendré acceso a ella. Entonces, la conexión de datos foráneos hr_dbparece correcta. ¿Qué más necesito dar accounting_userpara que pueda crear y descartar tablas extranjeras?

Shaun
fuente

Respuestas:

10

Para otorgar permisos para el servidor externo:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

Más detalles disponibles en el ejemplo en la página oficial https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html

romano
fuente
Eso ayudó con el permiso denegado, pero ERROR: only superuser can change options of a file_fdw foreign tableahora estoy recibiendo ... ☹️
msciwoj
> Eso ayudó con el permiso denegado, pero obtengo ERROR: solo el superusuario puede> cambiar las opciones de una tabla extranjera file_fdw ahora ... Necesitas conectarte en targetdb con el superusuario y después del uso de la concesión
Diego Scaravaggi