当不是超级用户但被授予 pg_read_server_files 角色时,
有声明
select * from pg_read_file('E:\PG_VERSION');
PostgreSQL 15 出现错误“绝对路径不允许”,而 14 则正常。
非超级用户如何使用绝对路径读取服务器文件?我不想将文件放入PGDATA目录。
当不是超级用户但被授予 pg_read_server_files 角色时,
有声明
select * from pg_read_file('E:\PG_VERSION');
PostgreSQL 15 出现错误“绝对路径不允许”,而 14 则正常。
非超级用户如何使用绝对路径读取服务器文件?我不想将文件放入PGDATA目录。
pg_read_server_files priv(在 v15 中)不再由声明为 noinherit 的角色继承,这似乎是在6198420a中进行的有意更改。这是为了使预定义角色的行为(在 NOINHERIT 下)与常规角色的行为更加一致。
因此,如果你想保留 NOINHERIT,在 v15 中你需要将 pg_read_server_files 直接授予 myuser,就像你已经(在 v14 中)必须
grant execute on function pg_read_file
直接授予 myuser 一样。或者,您可以在执行需要set role = parent_role
这些特权的操作之前执行其中parent_role 是直接拥有两项授权的角色。我注意到 15.0 的发行说明中没有提到这种行为变化,我不知道这是否是一个疏忽。