如何授予非超级用户执行函数 pg_read_binary_file 的权限?

How to GRANT priveleges to non-superuser to execute function pg_read_binary_file?

在 PostgreSQL 中,我有一个带有自定义函数的数据库 通过使用系统函数 pg_read_binary_file.

加载数据库 table 中文件的二进制内容

如果我运行这个自定义函数在具有超级用户权限的用户下,它执行成功。但是当用户没有超级用户权限时,我收到一个错误:

permission denied for function pg_read_binary_file

我认为我需要的只是简单地 GRANT 权限 EXECUTE 此类用户的功能,所以我做了以下操作:

GRANT EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint,boolean) TO someuser;
GRANT EXECUTE ON FUNCTION pg_read_binary_file(text,bigint,bigint) TO someuser; 
GRANT EXECUTE ON FUNCTION pg_read_binary_file(text) TO someuser;

如果我通过

检查权限
SELECT proacl FROM pg_proc WHERE proname='pg_read_binary_file';

我得到:

{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}

据我了解,现在 someuser 有权执行函数 pg_read_binary_file。但是当我尝试 运行 我的自定义函数时,我仍然收到相同的错误:

permission denied for function pg_read_binary_file

所以问题是如何给非超级用户权限执行函数pg_read_binary_file?也许还有一些额外的权限必须 g运行ted,但并不明显。

documentation on Portgres system functions for pg_read_binary_file 中写道:

Restricted to superusers by default, but other users can be granted EXECUTE to run the function.

我搜索了一些关于如何授予此类权限的附加信息,但没有成功。

三种可能:

  1. 您使用的是旧的 PostgreSQL 版本。

    commit e79350fef2917522571add750e3e21af293b50fe 之前,这不受函数权限的约束,而是由函数本身的硬编​​码检查来约束。

    然而,这似乎不是您的情况,因为错误消息将显示为:

    ERROR:  must be superuser to read files
    
  2. 当您尝试执行该功能时,您不是someuser。用

    测试
    SELECT current_user;
    
  3. 您连接到另一个数据库(例如,您更改了 postgres 数据库中的权限,但 someuser 连接到另一个数据库)。