【问题标题】:Using Postgres PGCrypto encryption requires superuser to run view queries使用 Postgres PGCrypto 加密需要超级用户来运行视图查询
【发布时间】:2016-09-24 00:08:27
【问题描述】:

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

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

错误:必须是超级用户才能读取文件上下文:PL/pgSQL 函数 分配时的第 13 行解密数据(bytea)

如果我使用 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没有运气。

有什么想法吗?

【问题讨论】:

    标签: postgresql permissions centos7 superuser pgcrypto


    【解决方案1】:

    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)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-01-30
        • 2023-01-02
        • 1970-01-01
        • 1970-01-01
        • 2012-06-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多