2015-10-06 31 views
0

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

# su - postgres 
$ psql 
> \password 

然后,我创建了通过nginx的,这将创建一个测试数据库,并填充它提供一个测试脚本。我试图通过使用postgres用户及其密码通过同行认证登录脚本,使用以下pdo dsn:

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

然而,随着SELinux的挣扎后,连接失败说的对等身份验证失败,所以我看着PostgreSQL的日志,发现:

交付的用户名(Postgres的)和athenticated用户名(阿帕奇) 不匹配。

因此,我可以推断,拥有该正试图访问数据库的过程中,用户是真实被认证的用户,所以我想我必须创建在数据库apache用户相应的角色。但为什么这样做呢?这是一种安全措施吗?有没有办法使用postgres角色或我绑定到apache角色?

回答

0

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

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

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

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

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

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

+0

好吧,我还有几个问题:是否有比md5更安全的方法?使用apache用户/角色安全吗(因为它是被认证的)?创建另一个UNIX用户然后在DBMS中创建其角色是否安全? – arielnmz

+0

@arielnmz对于本地环回md5很好。对于非回送,我强烈建议使用SSL。目前正在进行中的工作,希望能够支持9.6,支持基于HMAC的基于多种算法的协商身份验证。我建议为每个应用程序创建一个新的PostgreSQL用户并给它一个不同的密码。不需要创建一个unix用户,也不需要这样做;这只适用于'peer'认证。 –

+0

谢谢,还有一个问题:同行认证是否安全?最理想的是哪一种最好的方法? – arielnmz