PostgreSQL是一种功能强大的开源关系型数据库管理系统,被广泛用于各种应用程序和网站的数据存储和管理。本文将介绍在CentOS 7.9上安装和配置PostgreSQL 12的步骤。
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
sudo yum install -y postgresql12-server postgresql12
sudo /usr/pgsql-12/bin/postgresql-12-setup initdb
sudo systemctl start postgresql-12
sudo systemctl enable postgresql-12
sudo systemctl status postgresql-12
如果状态显示为"active (running)",则表示安装成功。
现在,你已经成功安装了PostgreSQL 12。
sudo -u postgres psql
输入 \q + 回车
或者 Ctrl + Z
即可退出操作。
你使用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)的密码,但仍然可以无需密码连接到数据库,可能有几个原因:
验证方法:请确保您在连接数据库时使用了正确的验证方法。默认情况下,PostgreSQL使用"ident"作为验证方法,此方法使用操作系统的标识验证机制。它依赖于操作系统的用户和组标识来验证用户的身份,当客户端连接到数据库时,PostgreSQL会检查客户端的操作系统用户和数据库用户是否匹配。如果匹配,则允许连接,否则拒绝连接。
配置文件:检查PostgreSQL的配置文件,通常是 postgresql.conf
和 pg_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字段用于指定身份验证方法。以下是一些常见的密码类型及其特点:
trust:此方法允许任何用户以任何方式连接到数据库,而无需进行身份验证。这是最不安全的方法,因为它不需要密码。
reject:此方法拒绝所有连接尝试,无论用户提供的凭据如何。
md5:此方法使用MD5哈希算法对密码进行加密,并将加密后的密码与数据库中存储的密码进行比较。这是一种相对安全的方法,因为密码在传输过程中是加密的。
scram-sha-256:此方法使用SCRAM-SHA-256算法对密码进行加密,并将加密后的密码与数据库中存储的密码进行比较。与MD5相比,SCRAM-SHA-256提供了更强的安全性。
password:此方法以明文形式发送密码,不进行加密。这是最不安全的方法,不建议在生产环境中使用。
ident:此方法使用操作系统的标识验证机制。它依赖于操作系统的用户和组标识来验证用户的身份。当客户端连接到数据库时,PostgreSQL会检查客户端的操作系统用户和数据库用户是否匹配。如果匹配,则允许连接,否则拒绝连接。
peer:此方法类似于ident方法,但它只验证客户端的操作系统用户,而不验证数据库用户。当客户端连接到数据库时,PostgreSQL会检查客户端的操作系统用户是否与数据库用户匹配。如果匹配,则允许连接,否则拒绝连接。
gss、sspi、pam、ldap、radius、cert:这些方法是基于不同的身份验证协议或机制,如GSSAPI、SSPI、PAM、LDAP、RADIUS和证书验证。它们提供了不同的身份验证方式,具体取决于系统配置和需求。
总的来说,"md5"和"scram-sha-256"是较为安全的密码类型,因为它们在传输过程中对密码进行了加密。而"trust"和"password"是较不安全的密码类型,因为它们不对密码进行加密。在生产环境中,建议使用"md5"或"scram-sha-256"来保护数据库的安全性。
在 CentOS 7.9 上修改 PostgreSQL (psql) 的配置后,你需要重新加载或重启 PostgreSQL 服务才能使配置生效。以下是两种方法:
sudo systemctl reload postgresql
这将重新加载 PostgreSQL 服务的配置文件,使新的配置生效,重新加载配置文件不会中断正在进行的连接。
sudo systemctl restart postgresql
这将停止并重新启动 PostgreSQL 服务,使新的配置生效。