无法从php脚本

时间:2015-10-06 17:27:57

标签: php postgresql nginx pdo

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

# su - postgres
$ psql
> \password

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

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

然而,在与SELinux挣扎之后,连接失败说对等身份验证失败,所以我查看了postgresql日志并发现:

  

提供的用户名(postgres)和未经身份验证的用户名(apache)不匹配。

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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