小编use*_*760的帖子

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

在 PostgreSQL 中,我有一个带有自定义函数的数据库,该函数使用系统函数在数据库表中加载文件的二进制内容pg_read_binary_file

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

permission denied for function pg_read_binary_file
Run Code Online (Sandbox Code Playgroud)

我认为我所需要的只是为此类用户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;
Run Code Online (Sandbox Code Playgroud)

如果我检查权限

SELECT proacl FROM pg_proc WHERE proname='pg_read_binary_file';
Run Code Online (Sandbox Code Playgroud)

我得到:

{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}
{postgres=X/postgres,someuser=X/postgres}
Run Code Online (Sandbox Code Playgroud)

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

permission denied for function pg_read_binary_file
Run Code Online (Sandbox Code Playgroud)

那么问题是如何授予非超级用户执行该函数的权限pg_read_binary_file?也许还有一些必须授予的额外权限,但这并不明显。

Portgres 系统功能的文档pg_read_binary_file写道:

默认情况下仅限超级用户,但可以授予其他用户EXECUTE运行该功能。

我搜索了一些有关如何授予此类权限的其他信息,但没有运气。

security postgresql privileges

6
推荐指数
1
解决办法
9804
查看次数

标签 统计

postgresql ×1

privileges ×1

security ×1