gpt4 book ai didi

postgresql - 如何授予非 super 用户权限以执行函数 pg_read_binary_file?

转载 作者:行者123 更新时间:2023-12-04 15:41:39 25 4
gpt4 key购买 nike

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

如果我在具有 super 用户权限的用户下运行此自定义功能,它会成功执行。但是当用户没有 super 用户权限时,我收到一个错误:

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

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

documentation on Portgres system functionspg_read_binary_file它写道:

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



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

最佳答案

有以下三种可能:

  • 您使用的是旧的 PostgreSQL 版本。

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

    但是,这似乎不是您的情况,因为错误消息将显示为:
    ERROR:  must be superuser to read files
  • 你不是 someuser当您尝试执行该功能时。测试
    SELECT current_user;
  • 您连接到不同的数据库(例如,您更改了 postgres 数据库中的权限,但 someuser 连接到不同的数据库)。
  • 关于postgresql - 如何授予非 super 用户权限以执行函数 pg_read_binary_file?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57668204/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com