Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSql:正确的密码或空白密码都可以访问数据库服务器_Postgresql_Postgresql 9.2 - Fatal编程技术网

PostgreSql:正确的密码或空白密码都可以访问数据库服务器

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

我有一个运行postgresql数据库服务器的VPS。现在我发现要么输入正确的密码,要么将密码留空,我就可以从任何远程计算机访问数据库。错误的密码无法访问数据库

空白密码访问显然是不可接受的

从pgAdmin和本地rails应用程序尝试

顺便说一句,这是亚马逊EC2。如果这有帮助的话

这是我的
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,每次更改配置文件时,我都会重新启动服务器。run
SHOW config\u文件
以了解您是否已更改了正确的files@devanand从输出来看似乎都是正确的?