外部服务器的权限被拒绝


8

我试图建立一个具有有限权限的用户,该用户将能够创建外部表。我有两个数据库,hr_dbaccounting_db。我已经hr_userhr_db和创建了一个accounting_user用户accounting_db。我只希望accounting_user用户对某些hr_db表(例如表)具有选择权限users。为此,以超级用户身份进入hr_db数据库并运行:

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

我设置了一个连接hr_dbaccounting_db使用外国数据包装:

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

然后,我为accounting_user用户添加了一个映射:

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

的密码accounting_user与我从命令行登录时使用的密码相同。这很好用:

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

我可以accounting_db作为accounting_user用户在数据库中创建一个常规表:

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

但是,如果我尝试创建外部表:

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

作为超级用户,我可以创建hr_people外部表,并且accounting_user可以访问它。因此,外部数据连接hr_db似乎正确。accounting_user为了使其能够创建和删除外部表,我还需要提供什么?

Answers:


10

授予外部服务器的权限:

GRANT USAGE ON FOREIGN SERVER hr_db TO accounting_user;

有关更多详细信息,请参见官方页面上的示例https://www.postgresql.org/docs/9.6/static/contrib-dblink-connect.html


允许被拒绝的情况有所帮助,但我现在得到ERROR: only superuser can change options of a file_fdw foreign table了…☹️–
msciwoj

>权限被拒绝,但我遇到了错误:我现在收到错误:现在只有超级用户可以>更改file_fdw外部表的选项……您需要在超级用户上连接targetdb并在使用授权后进行连接
Diego Scaravaggi
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.