跳转至

连接访问控制

一、pg_hba.conf文件

  1. 客户端认证是由一个配置文件(通常名为pg_hba.conf并被存放在数据目录中)控制(HBA表示基于主机的认证)。
  2. 在initdb初始化数据目录时,它会安装一个默认的pg_hba.conf文件。不过我们也可以把认证配置文件放在其它地方。
  3. pg_hba.conf文件的常用格式是一组记录,每行一条。空白行将被忽略,#注释字符后面的任何文本也被忽略。记录不能跨行。
  4. 一条记录由若干用空格/或制表符分隔的域组成。如果域值用双引号包围,那么它可以包含空格。在数据库、用户或地址域中引用一个关键字(例如,all或replication)将使该词失去其特殊含义,并且只是匹配一个有该名字的数据库、用户或主机。
1
2
3
4
5
6
7
[postgres@pg1 ~]$ grep -Ev '#|^$' $PGDATA/pg_hba.conf
local   all             all                                     trust
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust
local   replication     all                                     trust
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

二、名单格式

  1. TYPE:指定连接类型
  2. local:表示本地连接,只对Unix/Linux系统有效,使用socket方式登录
  3. host:表示主机通过TCP/IP连接
  4. hostssl:表示主机连接需要SSL加密方式连接
  5. DATABASE: 指定连接的数据库名
  6. all:表示所有的数据库
  7. db_name: 表示指定的数据库
  8. replications 表示主备复制时的连接
  9. USER: 指定连接的用户名
  10. all:表有所有用户
  11. username:表示指定的用户
  12. +group_name: 表示一组用户
  13. @file_name 表示文件中包含的用户列表
  14. ADDRESS: 指定访问的客户端主机
  15. 127.0.0.1/32:表示本地客户端主机
  16. 0.0.0.0/0:表示所有客户端主机
  17. hostname: 表示指定的主机名(hosts文件中包含)
  18. ip_addr/net_mask:表示指定的ip地址或者网段
  19. METHOD:指定验证方式
  20. trust:信任客户端连接,无需提供密码
  21. scram-sha-256:这是当前提供的方法中最安全的一种,但是旧的客户端库不支持这种方法。
  22. md5:它能防止口令嘎探并且防止口令在服务器上以明文存储,但是无法保护攻击者想办法从服务器上取了口令哈希的情况
  23. password:方法password以明文形式发送口令,因此它对于口令“探”攻击很脆弱。
  24. ident:该模式下系统会将请求发起者的操作系统用户映射为PostgessQL数据库内部用户,并以该内部用户的权限登录,且此时无需提供登录密码。操作系统用户与数据库内部用户之间的映射关系会记录在pg_ident.conf文件中。
  25. peer:该模式使用连接发起端的操作系统名进行身份验证。仅限于Linux、BSD、Macosx和Solaris,并且仅可用于本地服务器发起的连接。
  26. reject:该模式表示拒绝所有请求