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 hr_user
Benutzer für hr_db
und einen accounting_user
Benutzer für erstellt accounting_db
. Ich möchte nur, dass der accounting_user
Benutzer Auswahlrechte für einige hr_db
Tabellen hat, z. B. für die users
Tabelle. Um dies zu tun, ging ich als Superuser zur hr_db
Datenbank 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_db
aus accounting_db
mit 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_user
Benutzer 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 accounting_db
als accounting_user
Benutzer 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_people
und der accounting_user
hat Zugriff darauf. Die fremde Datenverbindung hr_db
scheint also korrekt zu sein. Was muss ich sonst noch geben accounting_user
, damit es fremde Tabellen erstellen und löschen kann?
ERROR: only superuser can change options of a file_fdw foreign table
bekomme jetzt ... ☹️