首先,我是来自MySQL的PostgreSQL新手。我刚刚从Fedora存储库中安装了PostgreSQL,并根据Fedora wiki页面创建了postgres用户,通过切换到postgres用户并使用psql shell创建了它的角色。
# su - postgres
$ psql
> 'password
然后我创建了一个通过nginx服务的测试脚本,它将创建一个测试数据库并填充它。我试图通过对等身份验证使用postgres用户及其密码从脚本登录,使用以下pdo dsn:
新PDO (' pgsql:用户= postgres密码 =**********');
然而,在尝试了SELinux之后,连接失败了,说peer身份验证失败了,所以我查看了postgresql的日志,发现:
发送的用户名(postgres)和认证的用户名(apache)不匹配
所以我可以推断出拥有试图访问数据库的进程的用户是正在进行身份验证的用户,所以我假设我必须在数据库中为apache用户创建相应的角色。但它为什么会这样呢?这是某种安全措施吗?是否有办法使用postgres角色,或者我绑定到apache角色?
应用程序不使用postgres
用户。这是一个管理角色。这就像作为root
运行web服务器一样。为应用程序创建权限较低的用户。你可能还想要CREATE DATABASE ... WITH OWNER myappuser;
给应用程序数据库的所有权,除非你计划使用细粒度的安全性。
创建一个用户供您的应用程序使用。设置一个随机生成的密码,并记录该密码,以便您的应用程序可以使用它。
创建一个供应用使用的数据库,应用用户作为数据库的所有者。(这不是最理想的方法,但却是最简单的方法。要了解更多信息,请阅读PostgreSQL手册中关于安全和特权的章节。
修改pg_hba.conf
,为使用md5
身份验证的数据库上的用户添加一个条目,至少对于感兴趣的数据库是这样。确保条目位于默认peer
条目之上。
然后重新加载PostgreSQL的配置- SELECT pg_reload_conf()
.
您的应用程序现在可以使用密码连接到PostgreSQL,但您仍然可以在命令行中使用psql
获得简单的peer
身份验证