使用 Postgres PGCrypto 加密需要超级用户 运行 查看查询

Using Postgres PGCrypto encryption requires superuser to run view queries

使用:Postgres 9、CentOS 7、 Postgres 数据目录不在默认位置,但使用 RSync 来确保权限正确。是的,适当的 .config 文件已更改。

当我尝试以非超级用户 (Testuser) 身份查询包含加密项目的视图时,出现此错误:

ERROR: must be superuser to read files CONTEXT: PL/pgSQL function decrypt_data(bytea) line 13 at assignment

如果我 运行 使用 POSTGRES 超级用户进行相同的查询,则查询可以正常完成。

这似乎是尝试读取密钥文件时的文件系统读取权限错误。我看到的所有使用加密的东西似乎都没有提到如何在没有超级用户的情况下 运行。

我已经 运行 为 Testuser 提供了以下资助:

GRANT ALL PRIVILEGES ON DATABASE xxx_db to Testuser;
GRANT SELECT ON ALL TABLES IN SCHEMA xxxxx TO Testuser;
GRANT ALL ON ALL TABLES IN SCHEMA xxxxx TO Testuser;

测试用户可以创建表、视图,基本上是该数据库中的任何内容。只是不能读取加密密钥。

现在密钥的权限是775,我什至尝试了777,但运气不佳。

有什么想法吗?

pgcrypto 是此处描述的 PostgreSQL 扩展: https://www.postgresql.org/docs/current/static/pgcrypto.html

但它不提供 decrypt_data(bytea) 功能。

这个函数似乎是用pg_read_file()或类似方法打开服务器端文件的自定义代码。

这些方法仅限于超级用户,以避免普通用户读取服务器的文件系统,无论他们想要读取的特定文件的 Unix 权限是什么。

你可以在decrypt_data(bytea)的源代码中验证这一点,可以通过以下方式获得:

select pg_get_functiondef('decrypt_data(bytea)'::regprocedure);

\df+ decrypt_data(bytea)来自psql。

我发现了问题。我需要授予用户功能权限。

授权执行架构 xxxxx 中的所有函数到 yyyyyyyyy;