PostgreSQL hba 文件的作用

PostgreSQL About 3,155 words

作用

hbahost based authentication基于主机的认证。

查看 hba 文件位置

show hba_file;

输出

postgres=# show hba_file;
                                hba_file
--------------------------------------------------------------------------
 /Users/fendoudebb/Library/Application Support/Postgres/var-15/pg_hba.conf
(1 row)

文件内容

# TYPE  DATABASE        USER            ADDRESS                 METHOD

local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
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

也可以使用SQL查看hba文件内容。

select pg_read_file('pg_hba.conf');

查看 hba 规则

hba文件会映射到pg_hba_file_rules这张表中。

select * from pg_hba_file_rules;

输出

postgres=# select * from pg_hba_file_rules;
 line_number | type  |   database    | user_name |  address  |                 netmask                 | auth_method | options | error
-------------+-------+---------------+-----------+-----------+-----------------------------------------+-------------+---------+-------
          89 | local | {all}         | {all}     |           |                                         | trust       |         |
          91 | host  | {all}         | {all}     | 127.0.0.1 | 255.255.255.255                         | trust       |         |
          93 | host  | {all}         | {all}     | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust       |         |
          96 | local | {replication} | {all}     |           |                                         | trust       |         |
          97 | host  | {replication} | {all}     | 127.0.0.1 | 255.255.255.255                         | trust       |         |
          98 | host  | {replication} | {all}     | ::1       | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | trust       |         |
(6 rows)

字段含义

TYPE

连接类型,允许连接数据库的方式。

  • local:通过Unix socket的方式连接。
  • host:通过TCP/IP的方式连接,它能匹配SSLnon-SSL连接。
  • hostssl:只允许SSL连接。
  • hostnossl:只允许non-SSL连接。

DATABASE

可连接的数据库。

除了特殊值之外,可以指定具体的数据库,可以用,逗号分割多个数据库。

  • all:所有数据库。
  • sameuser:可连接和用户名相同的数据库。
  • samerole:可连接和角色名相同的数据库。
  • replication:允许复制连接,用于集群环境下的数据库同步。

USER

可连接数据库的用户。

  • all:匹配所有用户。
  • 指定具体的数据库用户名。
  • 指定具体的数据库用户组,需要在前面加上+(如:+admin)。

ADDRESS

可连接数据库的地址。

  • all:允许所有IP地址。
  • samehost:允许该服务器的IP地址。
  • samenet:允许该服务器子网下的IP地址。
  • ipaddress/netmask:具体的IP地址(如:192.168.1.1⁄32),支持IPv4IPv6
  • 如果上面几种形式都匹配不上,就会被当成是hostname。 注意: 只有 host, hostssl, hostnossl 会应用个字段。

METHOD

连接数据库时的认证方式。

  • trust:无条件通过认证。
  • reject:无条件拒绝认证。
  • md5:用md5加密密码进行认证。
  • password:用明文密码进行认证,不建议在不信任的网络中使用。
  • ident:从一个ident服务器 (RFC1413) 获得客户端的操作系统用户名并且用它作为被允许的数据库用户名来认证,只能用在TCP/IP的类型中 (即host,hostssl,hostnossl)。
  • peer:从内核获得客户端的操作系统用户名并把它用作被允许的数据库用户名来认证,只能用于本地连接 (即local)。
  • 其他特殊值可以在官方文档中查阅。 简单来说,identpeer都要求客户端操作系统中存在对应的用户。 注意: 上面列举的只有md5password是需要密码的,其他方式都不需要输入密码认证。

参考文档

https://scarletsky.github.io/2017/04/26/client-authentication-in-postgresql/

官方文档

https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

Views: 411 · Posted: 2023-10-27

————        END        ————

Give me a Star, Thanks:)

https://github.com/fendoudebb/LiteNote

扫描下方二维码关注公众号和小程序↓↓↓

扫描下方二维码关注公众号和小程序↓↓↓


Today On History
Browsing Refresh