如何使用PostgreSQL配置文件

206 阅读4分钟

基于主机的配置,通常被称为ph_hba.conf,是一个用于PostgreSQL客户端认证的特殊文件。你可以把它看作是管理PostgreSQL数据库集群访问策略的一个配置文件。

在我们深入研究如何使用PostgreSQL配置文件之前,让我们先安装PostgreSQL。如果你已经安装了它,请随意跳过这一节。

安装PostgreSQL

要跟上本指南,你需要确保你已经安装了PostgreSQL。我将举例说明如何在 Debian 系统上安装它。

在 Arch 系统上- https://linuxhint.com/install-postgresql-10-arch-linux/

在CentOS/REHL上 -linuxhint.com/install_pos…

首先用以下命令更新你的系统。

sudo apt-get install update
sudo apt-get upgrade

更新后,创建一个文件库配置。

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

接下来,导入签名密钥并更新你的系统为。

wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - && sudo apt-get update

最后,用命令安装PostgreSQL服务器和客户端。

sudo apt-get install postgresql-13 postgresql-client-13

你可以指定其他PostgreSQL版本,如PostgreSQL 9、10、11、12、14等。

现在你可以用以下命令初始化PostgreSQL集群。

pg_ctlcluster 13 main start

了解ph_hba文件

默认情况下,ph_hba配置文件是在集群根目录下。

在我们的例子中,它是在

/etc/postgresql/13/main/ph_hba.conf

pg_hba遵循一个简单的配置格式。它包括一组配置规则,每行一个规则。

配置文件对空白处不敏感,所有以#开头的文件都被视为注释并被忽略。

pg_hba规则不能跨越多行,因为每行都被解释为一个单独的规则。

配置文件包含5条记录,其格式如下。

  • 类型 数据库 用户地址 方法 [选项]
  • 类型:代表主机类型。
  • 数据库:指定配置该规则的数据库。
  • User:与设置规则相匹配的设置数据库相关的用户名。
  • Address:客户端的地址。它可以是一个单一的IP或整个子网。PostgreSQL 支持 IPv4 和 IPv6 地址。
  • 方法:指定设置规则的认证方法。
  • 认证选项:为指定的认证方法添加功能的选项。
  • 选项:以 name=value 形式的认证方法选项。

PostgreSQL 接受各种认证方法。这些包括:

  • 信任:用于设置认证方法无条件地接受连接。如果设置为信任,任何人都可以作为任何用户和任何数据库连接到数据库服务器而不需要密码。
  • 拒绝:该方法与信任方法类似,但它无条件地拒绝连接。
  • 密码:如果该方法被设置为密码,连接的客户端必须提供一个未加密的密码。
  • 对等:对等认证方法通过使用连接客户端的操作系统用户名和检查用户名的匹配数据库,在本地连接上工作。一个例子是没有-U标志的psql命令。
  • Cert:这种认证方法使用连接客户端的SSL证书。
  • Ldap:使用一个LDAP服务器进行认证。

配置实例

pg_hba配置是一个原始文本文件,你可以用任何支持的文本编辑器进行编辑。

下面是一些配置,你可以出于故障排除或安全的目的进行配置。

允许任何用户连接到任何数据库(本地)。

TYPE DATABASE USER ADDRESS METHOD
local all all 127.0.0.0.1 trust

如果密码正确,允许来自特定IP的任何用户连接到一个特定的数据库。

TYPE DATABASE USER ADDRESS METHOD
host db_name all 192.168.0.112 scram-sha-256

拒绝来自一个特定IP子网的所有连接

TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD  
host all all 192.168.1.110 255.255.0.0 reject

允许或拒绝一个特定的IP网段

TYPE DATABASE USER ADDRESS METHOD  
host all all 192.168.0.1/24 reject

在IPv4协议中指定地址。

允许任何用户连接到IPv6上的任何数据库

TYPE DATABASE USER ADDRESS METHOD  
host all all ::1 trust

为了同时覆盖IPv6和IPv4,你可以指定主机名来代替。

TYPE DATABASE USER ADDRESS METHOD  
host all all .local reject

保存和应用配置

在保存配置之前,请确保配置的格式正确。要重新加载和应用这些变化,你可以使用pg_ctl工具。

该命令是

pg_ctl reload -s -D /etc/postgresql/13

D指的是包含配置文件的目录。如果没有指定,则使用默认值。

总的来说

pg_hba.conf配置文件有助于指定客户端对PostgreSQL服务器的认证。进行修改可以让你保护你的系统,只允许特定的用户和主机。