繁体   English   中英

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

[英]How to GRANT priveleges to non-superuser to execute function pg_read_binary_file?

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

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

permission denied for function pg_read_binary_file

我认为,所有我需要的是简单的GRANT权限EXECUTE此类用户funtion,所以我做了以下内容:

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函数的pg_read_binary_file 也许必须授予一些其他权限,但这并不明显。

上Portgres系统功能文档用于pg_read_binary_file则撰文指出:

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

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

有三种可能性:

  1. 您正在使用旧的PostgreSQL版本。

    提交e79350fef2917522571add750e3e21af293b50fe之前,这不受功能权限的限制,而是由功能本身中的硬编码检查决定的。

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

     ERROR: must be superuser to read files 
  2. 你是不是someuser当您尝试执行功能。 测试

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM