postgresql pg_hba.conf 配置详解

配置文件之pg_hba.conf介绍

该文件用于控制访问安全性,管理客户端对于PostgreSQL服务器的访问权限,内容包括:允许哪些用户连接到哪个数据库,允许哪些IP或者哪个网段的IP连接到本服务器,以及指定连接时使用的身份验证模式。

pg_hba.conf 配置详解

TYPE 参数设置

TYPE 表示主机类型,值可能为:

若为 local 表示是unix-domain的socket连接,

若为 host 是TCP/IP socket

若为 hostssl 是SSL加密的TCP/IP socket

DATABASE 参数设置

DATABASE 表示数据库名称,值可能为:

all ,sameuser,samerole,replication,数据库名称 ,或者多个

数据库名称用 逗号,注意ALL不匹配 replication

USER 参数设置

USER 表示用户名称,值可以为:

all,一个用户名一组用户名 ,多个用户时,可以用 ,逗号隔开,

或者在用户名称前缀 + ;在USER和DATABASE字段,也可以写一个单独的

文件名称用 @ 前缀,该文件包含数据库名称或用户名称

ADDRESS 参数设置

该参数可以为 主机名称 或者IP/32(IPV4)IP/128(IPV6),主机

名称以 .开头,samehostsamenet 匹配任意Ip地址

METHOD 参数设置

该值可以为

复制代码
"trust", "reject", "md5", "password", "scram-sha-256",
"gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert"

注意 若为password则发送的为明文密码

加载配置文件、生效

修改该配置文件中的参数,必须重启 postgreSql服务,若要允许其它IP地址访问该主机数据库,则必须修改 postgresql.conf 中的参数 listen_addresses*

重启:

复制代码
pg_ctl reload 或者 执行 SELECT pg_reload_conf()
配置实例参考

配置以下参数

复制代码
# TYPE DATABASE USER  ADDRESS   METHOD
host all  all  10.10.56.17/32  md5

参数说明

复制代码
host 参数表示安装PostgreSQL的主机

all 第一个all 表示该主机上的所有数据库实例

all 第二个all 表示所有用户

10.10.56.17/32 表示需要连接到主机的IP地址,32表示IPV4

md5 表示验证方式

即上述表示允许IP地址为10.10.56.17的所有用户可以通过MD5的密码验证方式连接主机上所有的数据库

也可以指定具体的数据库名称和用户

复制代码
# TYPE DATABASE USER  ADDRESS   METHOD
host test  pgtest  10.10.56.17/32  md5
即表示允许地址为 10.10.56.17 的用户 pgtest通过 MD5方式 加密的密码方式连接主机上的 test 数据库

也可以指定整个网段

复制代码
# TYPE DATABASE USER  ADDRESS   METHOD
host test  pgtest  0.0.0.0/0  md5

即表示允许 任意iP 通过用户名为 pgtest 和md5的 密码 验证方式连接主机上 test 的数据库

不进行密码验证

复制代码
# TYPE DATABASE USER  ADDRESS   METHOD
host test  pgtest  0.0.0.0/0  trust

表示任意IP地址的用户 pgtest 无需密码验证可直接连接访问该主机的 test 数据库

补充:postgresql配置文件pg_hba.conf配置、修改postgresql超级用户的密码

postgresql设置了用户名和密码,却发现不输入密码、或者密码输错都能登录。于是在网上查,知道了原来是配置文件pg_hba.conf的问题。

1.修改pg_hba.conf文件,使得数据库认证方式为加密登录

以下命令可以查找pg_hba.conf的路径

复制代码
[root@localhost ~]# find / - name pg_hba.conf

进入到该配置文件中

复制代码
[root@localhost ~]# vi /home/postgres/pgsql/data/pg_hba.conf

发现配置文件中内容是全部注释掉的,如下:

复制代码
# local DATABASE USER METHOD [OPTIONS]
# host DATABASE USER ADDRESS METHOD [OPTIONS]
# hostssl DATABASE USER ADDRESS METHOD [OPTIONS]
# hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]

以上相当于postgreql用户可以免密登录,在末尾加上

复制代码
host all all 0.0.0.0/0 md5

要求客户端提供一个 MD5 加密的口令进行认证,即必须有密码才能登录

修改完pg_hba.conf文件后保存退出,输入命令使配置生效

(1) 第一种生效方法

复制代码
[root@localhost data]# service postgresql reload

以上命令执行后会出现以下提示信息:

复制代码
Reload PostgreSQL: OK

说明pg_hba.conf配置文件的 修改已生效。

(2) 第二种生效方法

备注:隔几天后准备更改另外一台服务器的连接验证方式,发现用以上方法对pg_hba.conf的修改生效时报错。具体报错如下:

复制代码
[root@localhost data]# service postgresql reload
postgresql: unrecognized service

在网上查资料后,进行以下尝试。

① 切换到postgres用户

复制代码
[root@localhost ~]# su - postgres 
-bash-4.1$ pwd
/var/lib/pgsql
-bash-4.1$ ls
-bash-4.1$ 9.5
-bash-4.1$ cd *
-bash-4.1$ ls
backups data pgstartup.log

②使用pg_ctl命令对文件生效

复制代码
-bash-4.1$ ./pg_ctl reload
pg_ctl: no database directory specified and environment variable PGDATA unset 
Try "pg_ctl --help" for more information.

报错如上,需要在reload后添加data文件夹所在的路径

复制代码
-bash-4.1$ ./pg_ctl reload -D /var/lib/pgsql/9.5/data
server signaled

出现以上提示:server signaled时说明配置生效

修改postgresql默认超级用户postgres的密码

首先以postgres用户登录postgresql数据库

复制代码
[root@localhost ~]# sudo -u postgres psql

接着修改postgresql的登录密码,结尾必须有分号";",否则修改无效,执行命令后也不会出现ALTER ROLE。

复制代码
postgres =# alter user postgres with password '****';

以上命令执行后,会出现

复制代码
ALTER ROLE

说明修改生效,接着退出postgresql

复制代码
postgres =# q

到此超级用户postgres的密码修改完成,可在pgAdmin客户端进行验证。

指定用户可访问的数据库pg_hba.conf

以上配置为所有IP及网关都允许访问,使用MD5认证。

postgres用户可访问所有数据库

bret用户仅允许访问community、community2数据库

weather用户仅允许访问weather数据库

相关推荐
Musennn39 分钟前
MySQL刷题相关简单语法集合
数据库·mysql
Think Spatial 空间思维1 小时前
【HTTPS基础概念与原理】TLS握手过程详解
数据库·网络协议·https
laowangpython2 小时前
MySQL基础面试通关秘籍(附高频考点解析)
数据库·mysql·其他·面试
mooyuan天天2 小时前
SQL注入报错“Illegal mix of collations for operation ‘UNION‘”解决办法
数据库·web安全·sql注入·dvwa靶场·sql报错
运维-大白同学2 小时前
go-数据库基本操作
开发语言·数据库·golang
R-sz2 小时前
通过从数据库加载MinIO配置并初始化MinioClient,spring boot之Minio上传
数据库·oracle
洛阳泰山3 小时前
Windows系统部署MongoDB数据库图文教程
数据库·windows·mongodb
医只鸡腿子3 小时前
3.2/Q2,Charls最新文章解读
数据库·数据挖掘·数据分析·深度优先·数据库开发
bang___bang_3 小时前
PostgreSQL内幕剖析——结构与架构
数据库·postgresql
龙俊亨4 小时前
达梦数据库查看各数据库表内容
数据库