我试图建立一个具有有限权限的用户,该用户将能够创建外部表。我有两个数据库,hr_db
和accounting_db
。我已经hr_user
为hr_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_db
从accounting_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
为了使其能够创建和删除外部表,我还需要提供什么?
ERROR: only superuser can change options of a file_fdw foreign table
了…☹️–