PostgreSql:正确的密码或空白密码都可以访问数据库服务器
我有一个运行postgresql数据库服务器的VPS。现在我发现要么输入正确的密码,要么将密码留空,我就可以从任何远程计算机访问数据库。错误的密码无法访问数据库 空白密码访问显然是不可接受的 从pgAdmin和本地rails应用程序尝试 顺便说一句,这是亚马逊EC2。如果这有帮助的话 这是我的PostgreSql:正确的密码或空白密码都可以访问数据库服务器,postgresql,postgresql-9.2,Postgresql,Postgresql 9.2,我有一个运行postgresql数据库服务器的VPS。现在我发现要么输入正确的密码,要么将密码留空,我就可以从任何远程计算机访问数据库。错误的密码无法访问数据库 空白密码访问显然是不可接受的 从pgAdmin和本地rails应用程序尝试 顺便说一句,这是亚马逊EC2。如果这有帮助的话 这是我的pg_hba.conf设置: # TYPE DATABASE USER ADDRESS METHOD # "local" is for
pg_hba.conf
设置:
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all postgres md5
# IPv4 local connections:
host all postgres 127.0.0.1/32 md5
#########################
host all postgres 0.0.0.0/0 md5
# IPv6 local connections:
host all postgres ::1/128 md5
知道这里发生了什么吗?非常感谢
更新
$ /usr/local/pgsql/bin/psql
Password:
psql (9.2.4)
Type "help" for help.
postgres=# show config_file;
config_file
---------------------------------------
/usr/local/pgsql/data/postgresql.conf
(1 row)
postgres=# show hba_file;
hba_file
-----------------------------------
/usr/local/pgsql/data/pg_hba.conf
(1 row)
似乎都正确。您确定编辑了正确的配置文件(即postgres服务器使用的配置文件)吗?请注意,postgres发行版附带了一些示例配置文件。另外-更改配置后是否重新启动了服务器 另一个问题-如何访问数据库?它是来自应用程序还是来自命令行(即psql命令)
如果它来自命令行,那么不用担心,因为只有当您以postgres用户身份登录到shell时,它才会授予您访问权限,而要以postgres用户身份登录,您必须首先是root用户。这是我的设置。你可能想念其他人了
# TYPE DATABASE USER ADDRESS METHOD
local all all md5
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres md5
#host replication postgres 127.0.0.1/32 md5
#host replication postgres ::1/128 md5
哦,**!最后,我找到了解决这个问题的方法。
因此,我不需要密码来访问数据库服务器的原因是,.pgpass
文件已将我的密码存储在本地计算机上。这样我就不必输入连接到远程服务器的密码
我从来不知道.pgpass
文件会这样工作。所以,如果有人是像我这样的postgresql新手。希望这能有所帮助
谢谢所有其他的答案 我尝试使用pgAdmin和一个rails应用程序连接到该服务器上的数据库。两者都一样。我想我肯定我编辑了正确的配置文件。我甚至将本地访问权限更改为
md5
。现在,提示本地访问输入密码。但是,远程访问可以使用空白密码。我很困惑。这很奇怪-尝试在包含0.0.0.0/0
的行中将md5
更改为reject
。那么你就不能远程登录了。如果不是这样的话,那么它肯定不是您的服务器使用的文件。正如您所说,我只是尝试了reject
。它现在拒绝postgres用户与数据库的连接。似乎配置文件是正确的。然后我再次将拒绝更改为md5。空白密码又被访问了……我可以看到两种解释。首先-密码的md5
散列与空白字符串的散列完全相同-然后我真的很想知道它是什么?:)或者,您粘贴的配置不完整,并且在某个地方有一行类似于host all postgres 0.0.0/0 trust
(可能有人故意将其添加为数据库的后门?)。更改配置后是否重新启动数据库?@devand yea,每次更改配置文件时,我都会重新启动服务器。runSHOW config\u文件
以了解您是否已更改了正确的files@devanand从输出来看似乎都是正确的?