使用密码验证PostgreSQL身份认证

环境

PostgreSQL12.4 – PostgreSQL版本12.4
Ubuntu20.4 – Ubuntu版本20.4

首先

当连接到PostgreSQL时,默认使用的是peer认证方式。查看/etc/postgresql/12/main/pg_hba.conf文件,可以看到默认设置如下。

# TYPE    DATABASE        USER            ADDRESS                 METHOD
  local   all             postgres                                peer
  local   all             all                                     peer

在设置中,第一行是指使用UNIX域套接字进行连接,也就是在本地连接时,当postgres用户连接到任何数据库时,将应用对等认证。

当其他用户连接时,第二行的意思是对于所有数据库都会应用peer认证。

设定

如果只想对特定的一个用户(test用户)进行密码认证,而其他用户使用对等认证,可以采取如下措施。

# TYPE    DATABASE        USER            ADDRESS                 METHOD
  local   all             postgres                                peer
  local   all             test                                    md5
  local   all             all                                     peer

在这里的重要一点是,如果将测试用户添加到第二行,则密码验证将无效。如果将测试用户添加到第三行,则密码验证将无效。

pg_hba.conf的设置与设置防火墙时的描述方式相似。pg_hba.conf会按顺序进行加载。如果下方的描述中存在与上方描述重复的设置,则以上方的设置为准。

在上述示例中,test(第二行)下方有all(第三行)。由于test包含在all中,所以存在重复描述。在这种情况下,下方的all并不生效,而是由上方的test生效。换句话说,test用户将启用密码认证。METHOD中标有md5,表示将密码用MD5算法进行加密。如果以明文方式传输密码,则METHOD设置为password。由于安全性较弱,我认为很可能不会使用此设置。另外,如果不进行任何认证,则METHOD设置为trust。由于进一步降低了安全性,我认为也不会使用此设置。

如果更改了pg_hba.conf文件的设置,则需要重新启动PostgreSQL服务。如果不重新启动,设置将无效。

总结

现在,关于将对等认证更改为密码认证的原因是,如果要在PostgreSQL中添加新的角色,如果使用对等认证,那么在向PostgreSQL添加角色之后,还需要在Linux中添加具有相同名称的用户。如果不想在Linux中添加新用户,可以通过采用密码认证来避免这个问题。换句话说,即使在Linux中没有test用户并且以其他用户登录到Linux,也可以使用以下命令登录到PostgreSQL。

#psql -U test -d データベース名

请提供以下内容的同义中文句子:

“Can you give me a reference for this project?”

PostgreSQL的官方手册
https://www.postgresql.jp/document/12/html/auth-pg-hba-conf.html

广告
将在 10 秒后关闭
bannerAds