如何授予非超级用户执行函数 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.
我搜索了一些关于如何授予此类权限的附加信息,但没有成功。
三种可能:
您使用的是旧的 PostgreSQL 版本。
在 commit e79350fef2917522571add750e3e21af293b50fe 之前,这不受函数权限的约束,而是由函数本身的硬编码检查来约束。
然而,这似乎不是您的情况,因为错误消息将显示为:
ERROR: must be superuser to read files
当您尝试执行该功能时,您不是someuser
。用
测试
SELECT current_user;
您连接到另一个数据库(例如,您更改了 postgres
数据库中的权限,但 someuser
连接到另一个数据库)。
在 PostgreSQL 中,我有一个带有自定义函数的数据库 通过使用系统函数 pg_read_binary_file
.
如果我运行这个自定义函数在具有超级用户权限的用户下,它执行成功。但是当用户没有超级用户权限时,我收到一个错误:
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.
我搜索了一些关于如何授予此类权限的附加信息,但没有成功。
三种可能:
您使用的是旧的 PostgreSQL 版本。
在 commit e79350fef2917522571add750e3e21af293b50fe 之前,这不受函数权限的约束,而是由函数本身的硬编码检查来约束。
然而,这似乎不是您的情况,因为错误消息将显示为:
ERROR: must be superuser to read files
当您尝试执行该功能时,您不是
测试someuser
。用SELECT current_user;
您连接到另一个数据库(例如,您更改了
postgres
数据库中的权限,但someuser
连接到另一个数据库)。