非超级用户调用list_postgres_log_files函数遇权限拒绝问题
PostgreSQL log_fdw 非超级用户无法查看日志文件的解决方法
问题根源
从函数权限查询结果\df+ list_postgres_log_files可以明确:
- 函数
my_extensions.list_postgres_log_files()的执行权限仅对rds_superuser开放(Access privileges字段显示rds_superuser=X/rds_superuser,其中X代表执行权限) - 函数安全属性为
invoker(调用者权限),执行时会以当前用户身份运行,因此即使通过pg_monitor授权了底层pg_ls_logdir()的权限,若当前用户无此函数的执行权限,仍会触发permission denied错误。
解决步骤
- 切换回超级用户(如
rds_superuser)执行权限授予操作:
GRANT EXECUTE ON FUNCTION my_extensions.list_postgres_log_files() TO foo;
- 切换到
foo用户验证:
SET ROLE foo; SELECT * FROM my_extensions.list_postgres_log_files() ORDER BY 1;
额外说明
如果需要通过log_fdw访问具体日志文件内容,需确保:
foo用户对已创建的日志外部表有SELECT权限- 若需自行创建外部表,当前已授权的
USAGE,CREATE ON SCHEMA my_extensions和USAGE ON FOREIGN SERVER my_log_server权限已满足基础要求
内容的提问来源于stack exchange,提问作者Algoritmi
相关产品推荐
相关产品推荐

