CentOS 7.9 安装PostgreSQL以及配置服务

文章目录

  • 前言
  • 1. 安装步骤
  • 2. 连接PostgreSQL
  • 3. 配置服务
    • 配置文件所在路径
    • 设置监听地址
    • 修改数据库密码
    • 已经修改了密码,为什么没有生效?不需要密码就可以连接?
    • 设置访问权限
  • 4. 新的配置生效

前言

PostgreSQL是一种功能强大的开源关系型数据库管理系统,被广泛用于各种应用程序和网站的数据存储和管理。本文将介绍在CentOS 7.9上安装和配置PostgreSQL 12的步骤。


1. 安装步骤

  1. 添加PostgreSQL软件包的官方存储库。打开终端并使用root权限执行以下命令:
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
  1. 安装PostgreSQL 12服务器和客户端软件包。执行以下命令:
sudo yum install -y postgresql12-server postgresql12
  1. 初始化数据库。执行以下命令:
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
  1. 启动PostgreSQL服务并设置开机自启。执行以下命令:
sudo systemctl start postgresql-12
sudo systemctl enable postgresql-12
  1. 验证安装是否成功。执行以下命令:
sudo systemctl status postgresql-12

如果状态显示为"active (running)",则表示安装成功。

现在,你已经成功安装了PostgreSQL 12。

2. 连接PostgreSQL

sudo -u postgres psql

输入 q + 回车 或者 Ctrl + Z 即可退出操作。

3. 配置服务

配置文件所在路径

你使用sudo yum install -y postgresql12-server postgresql12命令安装PostgreSQL 12时,配置文件通常位于/var/lib/pgsql/12/data目录下。

具体来说,postgresql.conf是主要的配置文件,它包含了PostgreSQL服务器的各种配置选项。此文件位于/var/lib/pgsql/12/data目录下。

另外,还有一个名为pg_hba.conf的文件,它用于配置客户端的身份验证规则。该文件也位于/var/lib/pgsql/12/data目录下。

请注意,/var/lib/pgsql/12/data目录是默认的数据目录,你也可以根据需要在安装过程中选择其他目录。如果你在安装过程中选择了不同的数据目录,那么配置文件将位于你选择的目录下。

如果你无法找到配置文件,可以尝试使用以下命令来查找:

sudo find / -name postgresql.conf

这将在整个系统中搜索postgresql.conf文件,并显示其路径。

设置监听地址

修改/var/lib/pgsql/12/data目录下postgresql.conf文件,该文件配置PostgreSQL数据库服务器的相应的参数。

cd /var/lib/pgsql/12/data
vi postgresql.conf

参数 listen_addresses 表示监听的IP地址,默认是在localhost处监听,也就是127.0.0.1的ip地址上监听,只接受来自本机localhost的连接请求,这会让远程的主机无法登陆这台数据库,如果想从其他的机器上登陆这台数据库,需要把监听地址改为实际网络的地址,一种简单的方法是,将行开头的#去掉,把这个地址改为*,表示在本地的所有地址上监听。

#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = '*' # what IP address(es) to listen on;
                       # comma-separated list of addresses;
                       # defaults to 'localhost'; use '*' for all
                       # (change requires restart)
port = 5432            # (change requires restart)
max_connections = 100  # (change requires restart)

提示:vi进入编辑文件之后,点击 i键 进入编辑模式,编辑介绍之后,点击 Esc 退出编辑模式,再输入 :wq 回车 保存退出。

修改数据库密码

使用root用户或具有sudo权限的用户切换到postgres用户,并进入PostgreSQL命令行界面:

sudo -u postgres psql

在PostgreSQL命令行中,使用以下命令修改密码:

ALTER USER postgres WITH PASSWORD 'new_password';

已经修改了密码,为什么没有生效?不需要密码就可以连接?

如果已经修改了PostgreSQL用户(例如postgres)的密码,但仍然可以无需密码连接到数据库,可能有几个原因:

  1. 验证方法:请确保您在连接数据库时使用了正确的验证方法。默认情况下,PostgreSQL使用"ident"作为验证方法,此方法使用操作系统的标识验证机制。它依赖于操作系统的用户和组标识来验证用户的身份,当客户端连接到数据库时,PostgreSQL会检查客户端的操作系统用户和数据库用户是否匹配。如果匹配,则允许连接,否则拒绝连接。

  2. 配置文件:检查PostgreSQL的配置文件,通常是 postgresql.confpg_hba.conf。确保 pg_hba.conf 中为您的用户(例如postgres)配置了正确的身份验证方法,并且要求提供密码。

也可能验证方法设置了 trust 验证方法,无需密码就可登录,要设置密码登录,接下往下看。

设置访问权限

修改/var/lib/pgsql/12/data目录下pg_hba.conf 文件,该文件配置对数据库的访问权限。

vi pg_hba.conf

设置使用MD5哈希算法对密码进行加密:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     md5
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

添加以下配置,即可在所有客户端连接服务器的数据库:

host    all             all             0.0.0.0/0               md5

若是设置某一台主机可连接,比如IP地址为 192.168.0.45:
/32 会校验4个网段

host    all             all             192.168.0.45/32         md5

若是设置某个局域网可连接,前2个网段固定,比如IP地址为 192.168.xxx.xxx:
/16 会校验前面2个网段

host    all             all             192.168.0.0/16          md5

若是设置某个局域网可连接,前3个网段固定,比如IP地址为 192.168.1.xxx:
/24 会校验前面3个网段

host    all             all             192.168.1.0/24          md5

在PostgreSQL的pg_hba.conf配置文件中,METHOD字段用于指定身份验证方法。以下是一些常见的密码类型及其特点:

  1. trust:此方法允许任何用户以任何方式连接到数据库,而无需进行身份验证。这是最不安全的方法,因为它不需要密码。

  2. reject:此方法拒绝所有连接尝试,无论用户提供的凭据如何。

  3. md5:此方法使用MD5哈希算法对密码进行加密,并将加密后的密码与数据库中存储的密码进行比较。这是一种相对安全的方法,因为密码在传输过程中是加密的。

  4. scram-sha-256:此方法使用SCRAM-SHA-256算法对密码进行加密,并将加密后的密码与数据库中存储的密码进行比较。与MD5相比,SCRAM-SHA-256提供了更强的安全性。

  5. password:此方法以明文形式发送密码,不进行加密。这是最不安全的方法,不建议在生产环境中使用。

  6. ident:此方法使用操作系统的标识验证机制。它依赖于操作系统的用户和组标识来验证用户的身份。当客户端连接到数据库时,PostgreSQL会检查客户端的操作系统用户和数据库用户是否匹配。如果匹配,则允许连接,否则拒绝连接。

  7. peer:此方法类似于ident方法,但它只验证客户端的操作系统用户,而不验证数据库用户。当客户端连接到数据库时,PostgreSQL会检查客户端的操作系统用户是否与数据库用户匹配。如果匹配,则允许连接,否则拒绝连接。

  8. gss、sspi、pam、ldap、radius、cert:这些方法是基于不同的身份验证协议或机制,如GSSAPI、SSPI、PAM、LDAP、RADIUS和证书验证。它们提供了不同的身份验证方式,具体取决于系统配置和需求。

总的来说,"md5"和"scram-sha-256"是较为安全的密码类型,因为它们在传输过程中对密码进行了加密。而"trust"和"password"是较不安全的密码类型,因为它们不对密码进行加密。在生产环境中,建议使用"md5"或"scram-sha-256"来保护数据库的安全性。

4. 新的配置生效

在 CentOS 7.9 上修改 PostgreSQL (psql) 的配置后,你需要重新加载或重启 PostgreSQL 服务才能使配置生效。以下是两种方法:

  1. 重新加载配置:
sudo systemctl reload postgresql

这将重新加载 PostgreSQL 服务的配置文件,使新的配置生效,重新加载配置文件不会中断正在进行的连接。

  1. 重启 PostgreSQL 服务:
sudo systemctl restart postgresql

这将停止并重新启动 PostgreSQL 服务,使新的配置生效。