【问题标题】:Can't access a newly installed PostgreSQL from a php script无法从 php 脚本访问新安装的 PostgreSQL
【发布时间】:2015-10-06 17:27:57
【问题描述】:

首先,我是来自 MySQL 的 PostgreSQL 新手。我刚刚从 Fedora 存储库安装了 PostgreSQL,并根据 fedora wiki 页面创建了 postgres 用户,方法是 su-ing 到 postgres 用户并使用 psql shell 创建其角色。

# su - postgres
$ psql
> \password

然后我创建了一个通过 nginx 提供的测试脚本,它将创建一个测试数据库并填充它。我正在尝试通过对等身份验证使用 postgres 用户及其密码从脚本登录,并使用以下 pdo dsn:

new PDO('pgsql:user=postgres password=**********');

但是,在与SELinux斗争之后,连接失败说对等身份验证失败,所以我查看了postgresql日志,发现:

交付的用户名 (postgres) 和认证的用户名 (apache) 不匹配。

所以我可以推断拥有试图访问数据库的进程的用户是正在被验证的用户,所以我假设我必须为数据库中的 apache 用户创建相应的角色。但它为什么这样做呢?这是某种安全措施吗?有没有办法使用 postgres 角色还是我绑定到 apache 角色?

【问题讨论】:

    标签: php postgresql nginx pdo


    【解决方案1】:

    请勿将postgres 用户用于应用程序。这是一个管理角色。这就像以root 运行Web 服务器一样。为您的应用程序创建权限较低的用户。您可能还想CREATE DATABASE ... WITH OWNER myappuser; 为应用授予数据库的所有权,除非您打算使用更细粒度的安全性。

    创建一个用户供您的应用程序使用。设置一个随机生成的密码,并记录该密码,以便您的应用可以使用它。

    创建一个数据库供应用使用,应用用户作为数据库的所有者。 (这并不理想,但它是一种简单的方法。要了解更多信息,请阅读 PostgreSQL 手册中有关安全性和权限的章节。)

    修改pg_hba.conf 以在该数据库上为使用md5 身份验证的用户添加一个条目,至少对于感兴趣的数据库是这样。确保条目高于默认的peer 条目。

    然后重新加载 PostgreSQL 的配置 - SELECT pg_reload_conf()

    您的应用现在可以使用密码连接到 PostgreSQL,但您仍然可以在命令行上使用psql 获得简单的peer 身份验证。

    【讨论】:

    • 好的,我还有几个问题:有没有比 md5 更安全的方法?使用 apache 用户/角色是否安全(因为它是经过身份验证的)?创建另一个 UNIX 用户然后在 DBMS 中创建其角色是否安全?
    • @arielnmz 对于本地环回 md5 很好。对于非环回,我强烈建议使用 SSL。在支持具有多种算法的正确的基于 HMAC 的协商身份验证方面,有希望在 9.6 中进行的工作正在进行中。我建议为每个应用程序创建一个新的 PostgreSQL 用户并给它一个不同的密码。无需创建 unix 用户,也无需这样做;这仅适用于peer 身份验证。
    • 谢谢,再问一个问题:peer autentication 更安全吗?理想情况下,哪一个是最好的方法?
    • 如果有一个简单的千篇一律的答案,那么只有一种身份验证方法。对于在本地主机上运行的 web 应用,我已经给出了我的建议。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多