CentOS7下PostgreSQL9.2如何仅为单个用户启用MD5认证?
解决PostgreSQL 9.2针对特定用户配置MD5认证的问题
你已经在编辑pg_hba.conf上迈出了第一步,但问题大概率出在规则顺序或者用户密码设置上——PostgreSQL是从上到下匹配pg_hba.conf里的规则的,所以得把scale用户的MD5规则放在默认的peer规则前面,同时还要给这个PostgreSQL用户设置好MD5加密的密码才行。
步骤1:调整pg_hba.conf的规则顺序
先打开配置文件:
vi /var/lib/pgsql/data/pg_hba.conf
找到你现有的本地连接规则(通常是类似这样的默认配置):
# "local" is for Unix domain socket connections only local all all peer
一定要把针对scale用户的MD5规则放在这条peer规则的前面,添加内容如下:
# Allow the scale user to connect via MD5 from any local system account local all scale md5
这样设置后,当任何系统用户尝试连接PostgreSQL的scale用户时,会优先匹配这条MD5规则;而其他用户则会继续使用后面的peer认证规则,完全符合你的需求。
步骤2:为PostgreSQL的scale用户设置MD5密码
MD5认证需要用户有对应的加密密码,所以得先给scale用户设置密码:
- 切换到
postgres系统账户(默认的PostgreSQL管理账户):
su - postgres
- 进入psql命令行:
psql
- 执行SQL语句设置密码(替换成你自己的安全密码):
ALTER USER scale WITH PASSWORD 'your_secure_password_here';
- 退出psql:
\q
步骤3:重新加载PostgreSQL配置
不需要重启整个服务,只需要重新加载配置让修改生效:
systemctl reload postgresql-9.2
如果你的PostgreSQL服务名是通用的postgresql,就换成systemctl reload postgresql
验证配置是否生效
现在用任意系统账户测试连接:
psql -U scale -d your_target_database
(替换your_target_database为你要连接的数据库名称,也可以省略-d参数连接默认数据库)
输入你刚才设置的密码,应该就能成功登录了。而其他用户(比如postgres或者普通系统用户)仍然会使用peer认证,无需输入密码即可登录。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

