PostgreSQL权限被拒绝访问外部表pg_redis_fdw。

4

我正在使用postgres中的pg_rdeis_fdw

当我尝试从postgres账户向现有模式插入记录时,一切都正常。

然而,当我尝试从另一个用户执行相同操作时,我会收到“拒绝访问关系”的错误提示,尽管我已经授予该用户以下权限:

grant all on FOREIGN DATA WRAPPER redis_fdw to ami;
grant all on FOREIGN SERVER redis_server to ami;
grant all on ALL TABLES IN SCHEMA public to ami;
GRANT ALL PRIVILEGES ON TABLE user_redis_hash to ami;

以下是定义(正如我所说,从用户postgres运行良好):
CREATE EXTENSION redis_fdw;

CREATE SERVER redis_server
   FOREIGN DATA WRAPPER redis_fdw
   OPTIONS (address '127.0.0.1', port '6379');   

CREATE USER MAPPING FOR PUBLIC
            SERVER redis_server
            OPTIONS (password 'secret');

create foreign table user_redis_hash(key text, val text[])
   server redis_server
   options (database '0', tabletype 'hash', tablekeyset 'user:');   

感谢您,Ami。
1个回答

3

对于我的情况,我必须将外部表的所有者更改为正确的角色。因此您可以尝试像这样做(从postgres账户):

ALTER FOREIGN TABLE public.user_redis_hash OWNER TO ami;

如果您有其他外国表格(像我一样),并且需要更改它们所有的内容,以下 SQL 将生成一系列 SQL 行,您可以将其复制到 psql 提示符中以更新每个外国表格。

 SELECT 'ALTER FOREIGN TABLE '|| foreign_table_schema || '.' || foreign_table_name ||' OWNER TO ami;' FROM information_schema.foreign_tables WHERE NOT foreign_table_schema IN ('pg_catalog', 'information_schema') ORDER BY foreign_table_schema, foreign_table_name;

如果您有其他服务器或数据包装器的外国表,而您不想更改所有权,您可以通过在 WHERE 子句中添加 AND foreign_server_name = 'redis_server' 来限制上述操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接