我发现当通过pgadmin进行远程连接时,我的posgresql数据库服务器没有询问用户postgres
的密码。 我的意思是当我通过pgAdmin从本地计算机连接到远程数据库服务器时。
我在psql中添加了密码ALTER USER postgres PASSWORD 'mypassword'
。
这是我的pg_hba.config文件:
/usr/local/pgsql/bin/psql -qAt -c "show hba_file" | xargs grep -v -E '^[[:space:]]*#'
local all all trust
host all all 127.0.0.1/32 md5
host all all 0.0.0.0/0 md5
host all all ::1/128 md5
所以,我不太明白这里发生了什么。
任何人都可以帮忙吗?
非常感谢。
更新
如果我改变:
local all all trust
到
local all all md5
现在,将要求本地连接(通过SSH)输入密码(以前没有要求输入密码。)但是远程连接仍然会在没有密码的情况下连接。
实际上,我尝试通过另一台服务器的rails appliaction连接到这个数据库服务器,没有密码,并且rails服务器启动没有问题。
为了方便而将结果放在
此问题的真正原因是.pgpass
文件。 Mac将密码本地存储在用户主文件夹下的.pgpass
文件中。然后,每当用户尝试登录时没有密码,PostgreSQL将为用户发送密码。
官方文件here
答案 0 :(得分:17)
感谢所有评论和回答ppl!
但是这个问题的真正原因是.pgpass
文件。我的mac将密码本地存储在我的用户主文件夹下的.pgpass
文件中。然后每当我尝试登录时没有密码,PostgreSQL会为我发送密码。
这就是我遇到的问题......
再次感谢所有回复和评论!
有关详细信息,请参阅here
答案 1 :(得分:1)
阅读Postgresql.org上的文档
http://www.postgresql.org/docs/9.2/static/auth-pg-hba-conf.html
我建议您使用允许远程连接的少数用户的名称更改用户字段:
host all john,charles 0.0.0.0/0 md5
host all john,charles ::1/128 md5
此外,出于安全原因,我建议您考虑使用" hostssl"并且您还指定了可以远程访问的数据库的名称:
hostsll webapp123 john,charles 0.0.0.0/0 md5
如果远程访问仅来自特定计算机,请指定其静态IP地址(如果使用DHCP,请相应地使用掩码。)
hostsll webapp123 john,charles 1.2.3.4/32 md5
这样你只会破坏数据库webapp123,用户john和charles可以做什么,而且只能从计算机1.2.3.4。
如文档中所述,您可以拥有任意数量的条目,因此如果您想添加一个测试服务器(即您家中的服务器),那么您可以添加一行,如下所示:
hostsll webapp123 john,charles 1.2.3.4/32 md5
hostsll webapp123 henry home-ip/32 md5
通过不指定用户,您可能允许任何用户,包括那些没有密码的用户,其中一个用户被选中并且有效...
当然,我强烈建议您不要为在数据库中拥有管理权限的用户命名,除非您还指定了他的静态IP地址。