Tôi đang cố gắng thiết lập người dùng với các quyền hạn chế có thể tạo các bảng nước ngoài. Tôi có hai cơ sở dữ liệu, hr_db
và accounting_db
. Tôi đã tạo một hr_user
người dùng cho hr_db
và một accounting_user
người dùng cho accounting_db
. Tôi chỉ muốn accounting_user
người dùng có quyền chọn trên một số hr_db
bảng, chẳng hạn như users
bảng. Để làm điều này, với tư cách là một siêu người dùng, tôi đã đi đến hr_db
cơ sở dữ liệu và chạy:
GRANT CONNECT ON DATABASE hr_db TO accounting_user;
GRANT SELECT ON people TO accounting_user;
Tôi thiết lập một kết nối đến hr_db
từ accounting_db
sử dụng một wrapper dữ liệu nước ngoài:
CREATE SERVER hr_db FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (host 'localhost', dbname 'hr_db', port '5432');
Sau đó tôi đã thêm một ánh xạ cho accounting_user
người dùng:
CREATE USER MAPPING FOR accounting_user SERVER hr_db
OPTIONS (user 'accounting_user', password 'secretpassword');
Mật khẩu cho accounting_user
giống như mật khẩu tôi sử dụng để đăng nhập từ dòng lệnh. Điều này hoạt động tốt:
psql -U accounting_user -W hr_db
[enter accounting_user password]
SELECT * FROM people LIMIT 10;
Tôi có thể tạo một bảng thông thường trong accounting_db
cơ sở dữ liệu với tư cách là accounting_user
người dùng:
psql -U accounting_user -W accounting_db
[enter accounting_user password]
CREATE TABLE test (person_id integer NOT NULL);
DROP TABLE test;
Nhưng nếu tôi cố gắng tạo một bảng nước ngoài:
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
Là một siêu người dùng, tôi có thể tạo hr_people
bảng nước ngoài và accounting_user
sẽ có quyền truy cập vào nó. Vì vậy, kết nối dữ liệu nước ngoài hr_db
có vẻ đúng. Tôi cần gì nữa để cung cấp accounting_user
cho nó để có thể tạo và xóa các bảng nước ngoài?
ERROR: only superuser can change options of a file_fdw foreign table
ngay bây giờ ☹️