Izin Ditolak untuk Server Asing

8

Saya mencoba mengatur pengguna dengan izin terbatas yang dapat membuat tabel asing. Saya punya dua database, hr_dbdan accounting_db. Saya telah membuat hr_userpengguna untuk hr_dbdan accounting_userpengguna untuk accounting_db. Saya hanya ingin accounting_userpengguna memiliki hak pilih pada beberapa hr_dbtabel, seperti userstabel. Untuk melakukan ini, sebagai pengguna super saya pergi ke hr_dbdatabase dan berlari:

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

Saya mengatur koneksi ke hr_dbdari accounting_dbmenggunakan pembungkus data asing:

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

Saya kemudian menambahkan pemetaan untuk accounting_userpengguna:

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

Sandi untuk accounting_usersama dengan yang saya gunakan untuk masuk dari baris perintah. Ini berfungsi dengan baik:

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

Saya bisa membuat tabel biasa dalam accounting_dbdatabase sebagai accounting_userpengguna:

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

Tetapi jika saya mencoba membuat tabel asing:

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

Sebagai superuser, saya bisa membuat hr_peopletabel asing dan accounting_userakan memiliki akses ke sana. Jadi koneksi data asing hr_dbsepertinya benar. Apa lagi yang perlu saya berikan accounting_useragar bisa membuat dan menjatuhkan tabel asing?

Shaun
sumber

Jawaban:

10

Untuk memberikan izin untuk server asing:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

Rincian lebih lanjut tersedia dalam contoh di halaman resmi https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html

Roma
sumber
Itu membantu dengan izin ditolak tetapi saya mendapatkan ERROR: only superuser can change options of a file_fdw foreign tablesekarang ... ☹️
msciwoj
> Itu membantu dengan izin yang ditolak tetapi saya mendapatkan ERROR: hanya superuser yang dapat> mengubah opsi tabel asing file_fdw sekarang ... Anda harus terhubung pada targetdb dengan superuser dan setelah memberikan penggunaan
Diego Scaravaggi