it-swarm.com.de

Berechtigung für fremden Server verweigert

Ich versuche, einen Benutzer mit eingeschränkten Berechtigungen einzurichten, der fremde Tabellen erstellen kann. Ich habe zwei Datenbanken, hr_db Und accounting_db. Ich habe einen Benutzer hr_user Für hr_db Und einen Benutzer accounting_user Für accounting_db Erstellt. Ich möchte nur, dass der Benutzer accounting_user Auswahlrechte für einige hr_db - Tabellen hat, z. B. für die Tabelle users. Um dies zu tun, ging ich als Superuser zur Datenbank hr_db Und führte Folgendes aus:

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

Ich habe eine Verbindung zu hr_db Von accounting_db Mit einem fremden Daten-Wrapper hergestellt:

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 Benutzer accounting_user Hinzugefügt:

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

Das Passwort für accounting_user Ist 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 eine reguläre Tabelle in der Datenbank accounting_db Als Benutzer accounting_user 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 fremde Tabelle hr_people Erstellen und die accounting_user Hat Zugriff darauf. Die fremde Datenverbindung zu hr_db Scheint also korrekt zu sein. Was muss ich noch geben, um accounting_user Zu geben, damit fremde Tabellen erstellt und gelöscht werden können?

8
Shaun

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

10
Roman