use*_*760 6 security postgresql privileges
在 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运行该功能。
我搜索了一些有关如何授予此类权限的其他信息,但没有运气。
有以下三种可能:
您正在使用旧的 PostgreSQL 版本。
在提交 e79350fef2917522571add750e3e21af293b50fe之前,这不受函数权限的控制,而是由函数本身的硬编码检查控制。
然而,这似乎不是你的情况,因为错误消息将显示:
ERROR: must be superuser to read files
Run Code Online (Sandbox Code Playgroud)someuser当您尝试执行该函数时,您却没有。测试用
SELECT current_user;
Run Code Online (Sandbox Code Playgroud)您已连接到不同的数据库(例如,您更改了数据库中的权限postgres,但someuser连接到了不同的数据库)。
| 归档时间: |
|
| 查看次数: |
9804 次 |
| 最近记录: |