PostgreSQL 权限被拒绝到外表pg_redis_fdw



我正在使用来自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:');   

谢谢阿米

就我而言,我不得不将外表的所有者更改为正确的角色。因此,您可以尝试以下操作(从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'来限制上述内容。

最新更新