[英]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
运行该功能。
我搜索了一些有关如何授予此类权限的附加信息,但是没有运气。
有三种可能性:
您正在使用旧的PostgreSQL版本。
在提交e79350fef2917522571add750e3e21af293b50fe之前,这不受功能权限的限制,而是由功能本身中的硬编码检查决定的。
但是,这似乎不是您的情况,因为错误消息将显示为:
ERROR: must be superuser to read files
你是不是someuser
当您尝试执行功能。 测试
SELECT current_user;
您已连接到另一个数据库(例如,您更改了postgres
数据库中的权限,但someuser
连接到另一个数据库)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.