psql -U someuser -W some_db 不尊重密码?

psql -U someuser -W some_db doesn't respect the password?

我有一个数据库和一个通过 PSQL 设置的角色,例如...

CREATE ROLE someuser WITH LOGIN PASSWORD 'S0m3u53r';
CREATE DATABASE some_db OWNER someuser;

我注意到当我尝试以该用户身份连接时,我可以输入我想要的任何密码。下面是我输入 "fizzbuzz" 作为密码的 psql 会话的输出。 Psql 只是让我进去,从不费心检查密码。

$ psql -U someuser -W some_db
Password for user someuser:
psql (9.4.1)
Type "help" for help.

some_db=> select current_user;
 current_user
--------------
 someuser
(1 row)
some_db=>

为什么 psql 不强制执行该用户密码?当我输入错误的密码时,我预计它会以某种方式拒绝我,但 psql 似乎并不关心。我一定是遗漏了什么。

postgres 用户身份验证设置存储在名为 pg_hba.conf 的文件中。

您当前的设置允许任何人通过 unix 套接字 进行本地连接 trusted,即登录时不需要密码。只要用户存在于数据库中,就允许登录。

对于本地连接,您可以将其更改为 md5password 对于网络连接,password 不够安全,因为它发送原始文本密码。

找到您的 pg_hba.conf 文件。在文件底部附近有一行内容如下:

# "local" is for Unix domain socket connections only
local   all             all                                     trust

改为

# "local" is for Unix domain socket connections only
local   all             all                                     md5

pg_hba.conf 文件的位置取决于您使用的系统。在 Ubuntu,文件将在

/etc/postgresql/9.4/main/pg_hba.conf

在 OSX 上(通过自制程序安装),文件的路径是

/usr/local/var/postgres/pg_hba.conf

要了解有关 postgres 身份验证的更多信息,请参阅 official documentation