Quyền bị từ chối cho máy chủ nước ngoài


8

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_dbaccounting_db. Tôi đã tạo một hr_userngười dùng cho hr_dbvà một accounting_userngười dùng cho accounting_db. Tôi chỉ muốn accounting_userngười dùng có quyền chọn trên một số hr_dbbảng, chẳng hạn như usersbả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_dbcơ 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_dbtừ accounting_dbsử 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_userngười dùng:

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

Mật khẩu cho accounting_usergiố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_dbcơ sở dữ liệu với tư cách là accounting_userngườ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_peoplebảng nước ngoài và accounting_usersẽ có quyền truy cập vào nó. Vì vậy, kết nối dữ liệu nước ngoài hr_dbcó vẻ đúng. Tôi cần gì nữa để cung cấp accounting_usercho nó để có thể tạo và xóa các bảng nước ngoài?

Câu trả lời:


10

Để cấp quyền cho máy chủ nước ngoài:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

Thêm chi tiết có sẵn trong ví dụ trên trang chính thức https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html


Điều đó đã giúp với sự cho phép bị từ chối nhưng tôi nhận được ERROR: only superuser can change options of a file_fdw foreign tablengay bây giờ ☹️
msciwoj

> Điều đó đã giúp với sự cho phép bị từ chối nhưng tôi đang nhận được LRI: chỉ siêu người dùng mới có thể> thay đổi tùy chọn của một tập tin nước ngoài file_fdw ngay bây giờ Bạn cần kết nối trên targetdb với superuser và sau khi sử dụng cấp
Diego Scaravaggi
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.