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

时间:2016-09-24 00:08:27

标签: postgresql permissions centos7 superuser pgcrypto

使用:Postgres 9,CentOS 7, Postgres Data目录不在默认位置,但使用RSync确保权限正确。是的.config文件已经改变了。

当我尝试查询包含加密项目的视图作为NON超级用户(Testuser)时,我收到此错误:

  

错误:必须是超级用户才能读取文件语境:PL / pgSQL函数   decrypt_data(bytea)第13行分配

如果我使用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。

任何想法?

2 个答案:

答案 0 :(得分:0)

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);
来自psql中的

\df+ decrypt_data(bytea)

答案 1 :(得分:0)

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

对SCHEMA xxxxx中的所有功能执行授予yyyyyyyyy;