我有一个数据库和我通过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似乎并不关心。我必须在这里遗漏一些东西。
答案 0 :(得分:2)
postgres用户身份验证设置存储在名为pg_hba.conf
的文件中。
您当前的设置允许任何人在本地连接,通过unix套接字为trusted
,即登录时不需要密码。只要用户存在于数据库中,就可以登录。
您可以将其更改为md5
或password
以获取本地连接对于通过网络的连接,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