在Ubuntu 12.04上安装PostgreSQL 9.1后,我为"postgres"超级用户帐户设置了密码.我希望所有用户在登录时都必须输入密码.这就是为什么我这样配置pg_hba.conf:
#Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
Run Code Online (Sandbox Code Playgroud)
我做了这些更改后重新启动了postgresql.当我这样做时,psql -U testuser我被要求输入密码,但是当我使用"postgres"帐户登录时,psql -U postgres我没有得到密码提示并登录.如果我强制提示密码,psql -U postgres -W我可以通过输入正确的密码登录或者根本不输入任何东西.输入错误的密码会被拒绝.
任何人都可以向我解释为什么会这样吗?
在一个相关的说明:我看到很多例子,其中人们使用ident作为"postgres"用户的身份验证方法,认为要成为"postgres"用户需要机器的root密码.我假设推理是,如果攻击者获得root访问权限,那么无论如何都要完成.我更喜欢使用密码登录,一个与root密码不同.我喜欢为不同的东西设置不同的密码.这合理吗?
输出 grep '^[^#]' pg_hba.conf
local all postgres md5
local all all md5
host all all 127.0.0.1/32 md5
Run Code Online (Sandbox Code Playgroud) 我在linux框上设置了postgresql 8.3 db,并配有用户postgres pg_hba.conf读取
local all postgres ident sameuser
local all all md5
Run Code Online (Sandbox Code Playgroud)
所以没有来自本地机器的可信连接.
然而,当通过命令行与psql连接时,不会询问密码,所有用户都可以访问所有数据库.
我完全迷失在这里..