8.PG实例层连接访问管理(pg系列课程) 第2遍
一、概述
实例访问控制就像是一道防火墙,用它来控制来自于不同主机、不同用户是否
允许访问指定的数据库、以及验证方式。
二、客户端配置认证文件
客户端配置认证文件: pg_hba.conf
格式如下:
# TYPE DATABASE USER ADDRESS METHOD
(一)TYPE:指定连接类型
1、local
表示本地连接,只对Unix/Linux系统有效,使用socket方式登录
2、host
表示主机通过TCP/IP连接,即远程连接
3、hostssl
表示主机连接需要SSL加密方式连接,即远程连接时加密
本地连接:无需指定主机名和端口
[postgres@db ~]$psql -U u1 -d postgres
psql (16.0)
Type "help" for help.
postgres=# \q
远程连接:需要指定主机名和端口
[postgres@db ~]$psql -U u1 -d postgres -h localhost -p 5432
psql (16.0)
Type "help" for help.
postgres=#
(二)、DATABASE:指定连接的数据库名
1、all
表示所有的数据库
2、db_name
表示指定的数据库
3、replication
表示主备复制时的连接
(三)USER:指定连接的用户名
pgsql -U user
1、all
表有所有用户
2、user name
表示指定的用户
3、+group_name
表示一组用户
4、@file_name
表示文件中包含的用户列表
(四)ADDRESS:指定访问的客户端主机
1、127.0.0.1/32
表示本地客户端主机。
/32:这是一种子网掩码的简略表示法,表示子网掩码为 255.255.255.255 。
“127.0.0.1/32” 就明确地指定了一个唯一的主机地址,不存在网络内其他主机的可能性, 这个表示形式强调了 127.0.0.1 是一个独立的、唯一的地址 。
2、0.0.0.0/0
表示所有客户端主机
3、host_name
表示指定的主机名(hosts文件中包含)
4、ip_addr/net mask
表示指定的ip地址或者网段。
例如:192.168.18.0/24
“192.168.18.0/24” 代表了一个局域网网络。地址范围是从 192.168.18.1 到 192.168.18.254
(五)METHOD:指定验证方式
1、trust
信任客户端连接,无需提供密码
2、scram-sha-256
这是当前提供的方法中最安全的一种,但是旧的客户端库不支持
这种方法。
3、md5
它能防止口令嗅探并且防止口令在服务器上以明文存储,但是无法保护攻
击者想办法从服务器上窃取了口令哈希的情况。
4、password
方法password以明文形式发送口令,因此它对于口令“嗅探”攻击很
脆弱。
5、ident
该模式下系统会将请求发起者的操作系统用户映射为PostgessQl据库内
部用户,并以该内部用户的权限登录,且此时无需提供登录密码。操作系统用户
与数据库内部用户之间的映射关系会记录在pg_ident.conf文件中。
6、peer
该模式使用连接发起端的操作系统名进行身份验证。仅限于Linux、BSD、
MacOsx和Solaris,并且仅可用于本地服务器发起的连接。
7、reject
该模式表示拒绝所有请求
(六)连接案例
1、psql
在postgres操作系统用户使用psql等同于psql -U postgres -d postgres
在test操作系统用户使用psql等同于psql -U test -d test ,这样有可能连接失败。
2、本地登录需要使用密码
[postgres@db /var/postgre/data]$vi pg_hba.conf
[postgres@db /var/postgre/data]$
local all all md5
修改使配置生效
[postgres@db /var/postgre/data]$pg_ctl reload
server signaled
[postgres@db /var/postgre/data]$psql
psql (16.0)
Type "help" for help.
postgres=#
3、远程连接
[postgres@db /var/postgre/data]$vi pg_hba.conf
[postgres@db /var/postgre/data]$
host all all 127.0.0.1/32 trust
修改使配置生效
[postgres@db /var/postgre/data]$pg_ctl reload
[postgres@db /var/postgre/data]$psql -U postgres -d postgres -h 127.0.0.1 -p 5432
psql (16.0)
Type "help" for help.
postgres=#
4、拒绝某台主机连接
[postgres@db /var/postgre/data]$vi pg_hba.conf
[postgres@db /var/postgre/data]$
host all all xc_db01 reject
修改使配置生效
[postgres@db /var/postgre/data]$pg_ctl reload
xc_db01是主机名,主机名和ip的映射关系可以写入到/etc/hosts文件中。这里也可以直接写ip
5、配置注意事项
包含范围越少的要写在前面,范围大的写在后面。如果把范围大的写成前面,比如reject某个网段的,如果写在前面的话,那么即使后面写了这个网段内的某个ip允许连接的话,实际上也访问不了。
例如:如果把 host all all 0/0 reject写在最前面,即使后面有允许连接的,那么谁也访问不了