Saya mencoba mengatur pengguna dengan izin terbatas yang dapat membuat tabel asing. Saya punya dua database, hr_db
dan accounting_db
. Saya telah membuat hr_user
pengguna untuk hr_db
dan accounting_user
pengguna untuk accounting_db
. Saya hanya ingin accounting_user
pengguna memiliki hak pilih pada beberapa hr_db
tabel, seperti users
tabel. Untuk melakukan ini, sebagai pengguna super saya pergi ke hr_db
database dan berlari:
GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;
Saya mengatur koneksi ke hr_db
dari accounting_db
menggunakan 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_user
pengguna:
CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');
Sandi untuk accounting_user
sama 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_db
database sebagai accounting_user
pengguna:
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_people
tabel asing dan accounting_user
akan memiliki akses ke sana. Jadi koneksi data asing hr_db
sepertinya benar. Apa lagi yang perlu saya berikan accounting_user
agar bisa membuat dan menjatuhkan tabel asing?
ERROR: only superuser can change options of a file_fdw foreign table
sekarang ... ☹️