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?
fuente

ERROR: only superuser can change options of a file_fdw foreign tableahora estoy recibiendo ... ☹️