Berechtigung für fremden Server verweigert


8

Ich versuche, einen Benutzer mit eingeschränkten Berechtigungen einzurichten, der fremde Tabellen erstellen kann. Ich habe zwei Datenbanken hr_dbund accounting_db. Ich habe einen hr_userBenutzer für hr_dbund einen accounting_userBenutzer für erstellt accounting_db. Ich möchte nur, dass der accounting_userBenutzer Auswahlrechte für einige hr_dbTabellen hat, z. B. für die usersTabelle. Um dies zu tun, ging ich als Superuser zur hr_dbDatenbank und lief:

GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;

Ich habe eine Verbindung zum oben hr_dbaus accounting_dbmit einer fremden Datenverpackung:

CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'hr_db', port '5432');

Ich habe dann eine Zuordnung für den accounting_userBenutzer hinzugefügt :

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

Das Passwort für accounting_userist das gleiche wie das, mit dem ich mich über die Befehlszeile anmelde. Das funktioniert gut:

psql -U accounting_user -W hr_db
[enter accounting_user password]
SELECT * FROM people LIMIT 10;

Ich kann accounting_dbals accounting_userBenutzer eine reguläre Tabelle in der Datenbank erstellen :

psql -U accounting_user -W accounting_db
[enter accounting_user password]
CREATE TABLE test (person_id integer NOT NULL);
DROP TABLE test;

Aber wenn ich versuche, eine fremde Tabelle zu erstellen:

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

Als Superuser kann ich die Fremdtabelle erstellen hr_peopleund der accounting_userhat Zugriff darauf. Die fremde Datenverbindung hr_dbscheint also korrekt zu sein. Was muss ich sonst noch geben accounting_user, damit es fremde Tabellen erstellen und löschen kann?

Antworten:


10

So erteilen Sie Berechtigungen für den fremden Server:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

Weitere Details finden Sie im Beispiel auf der offiziellen Seite https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html


Das half mit Erlaubnis verweigert, aber ich ERROR: only superuser can change options of a file_fdw foreign tablebekomme jetzt ... ☹️
msciwoj

> Das mit Erlaubnis verweigert geholfen , aber ich bin immer ERROR: nur Superuser können> Änderungsmöglichkeiten eine file_fdw Fremdtabelle jetzt ... Sie müssen sich auf einer Verbindung targetdb mit Super - User und nach Erteilung Nutzung
Diego Scaravaggi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.