pg数据库安装完成后,默认只支持回环地址本地认证,即只能通过127.0.0.1在服务端localhost本地登录。需要修改认证配置才可以实现其他方式的认证登录。
关于pg的安装,可参考上一篇文章:
【从Oracle到PG】PostgreSQL-11.5源码编译安装
区别于Oracle只需要listener.ora即可实现相关的监听配置,postgresql需要通过postgresql.conf参数文件中listen_addresses参数并结合pg_hba.conf一起作用来控制客户端的访问,和Oracle的listener.ora和sqlnet.ora一起的作用相类似。
在修改相关认证配置之前,采用host网络认证方式登录会直接报错:
[postgres@akendb01]$psql -p5432 -h192.168.1.108
2019-08-27 12:27:21.528 CST [11753] FATAL: no pg_hba.conf entry for host "192.168.1.108", user "postgres", database "postgres", SSL off
psql: FATAL: no pg_hba.conf entry for host "192.168.1.108", user "postgres", database "postgres", SSL off
[postgres@akendb01]$
这需要在pg_hba.conf文件将IP地址加入到host认证方式中:
# TYPE DATABASE USER ADDRESS METHOD
hostssl all all 192.168.1.108/32 md5
上述配置的意思为:允许所有DB用户通过ip-192.168.1.108以hostssl密码验证的方式访问PostgreSQL实例中的任意database。
这时直接使用如下host访问依旧会报错:
[postgres@akendb01]$psql -p5432 -h192.168.1.108
psql: could not connect to server: Connection refused
Is the server running on host "192.168.1.108" and accepting
TCP/IP connections on port 5432?
[postgres@akendb01]$vi postgresql.conf
这里访问被拒绝,是因为postgresql.conf文件listen_addresses默认只允许localhost本地访问,需要将该参数值做相应修改:
listen_addresses='*'
port=5432
修改listen_addresses需要重启才能生效,参数port则只需重新reload加载参数配置文件即可生效。
[postgres@akendb01]$pg_ctl restart
[postgres@akendb01]$psql -p5432 -h192.168.1.108
Password for user postgres:
psql (11.5)
Type "help" for help.
(postgres@192.168.1.108:5432)[postgres]#
当客户端程序访问PostgreSQL服务端的时候,Postmaster进程充当了Oracle中listener的角色,在fork对应的服务进程之前会检测客户端请求是否符合pg_hba.conf中的验证方法,符合情况下fork出后端进程backend process处理客户端的请求,类似于Oracle的service process。
关于pg认证方法的更多信息,参数postgresql官方文档:
https://www.postgresql.org/docs/current/static/auth-methods.html