使用密码验证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