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

时间:2016-02-02 02:21:24

标签: postgresql psql

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

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

我注意到当我尝试以该用户身份连接时,我可以输入我想要的任何密码。下面是psql会话的输出,我输入“fizzbuzz”作为密码。 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似乎并不关心。我必须在这里遗漏一些东西。

1 个答案:

答案 0 :(得分:2)

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