PostgreSql: либо правильный пароль, либо ПУСТОЙ пароль могут получить доступ к серверу базы данных

У меня есть VPS с сервером базы данных postgresql. Теперь я обнаружил, что либо я ввожу правильный пароль, либо оставляю пароль пустым, я могу получить доступ к базе данных с любого удаленного компьютера. Неправильный пароль не может получить доступ к базе данных.

Доступ с пустым паролем явно неприемлем.

Пробовал из pgAdmin и локального приложения rails.

Кстати, это Amazon 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)

Вроде все правильно.


person Yunwei.W    schedule 09.01.2014    source источник
comment
вы перезапустили базу данных после изменения конфигурации?   -  person devanand    schedule 09.01.2014
comment
@devanand да, я перезапускал сервер каждый раз, когда вносил изменения в файл конфигурации.   -  person Yunwei.W    schedule 09.01.2014
comment
запустите SHOW config_file;, чтобы узнать, изменили ли вы нужные файлы   -  person devanand    schedule 09.01.2014
comment
@devanand кажется, все правильно в соответствии с выводом?   -  person Yunwei.W    schedule 09.01.2014


Ответы (3)


Вы уверены, что отредактировали правильный файл конфигурации (то есть тот, который используется сервером postgres)? Обратите внимание, что есть несколько примеров файлов конфигурации, которые поставляются с дистрибутивом postgres. Кроме того, перезапускали ли вы сервер после внесения изменений в конфигурацию?

Другой вопрос - как вы получаете доступ к своей базе данных? Это из приложения или из командной строки (например, команда psql)?

Если это из командной строки, то не беспокойтесь об этом, так как это даст вам доступ только в том случае, если вы вошли в оболочку как пользователь postgres, а для входа в систему как пользователь postgres вам сначала нужно быть root.

person golem    schedule 09.01.2014
comment
Я попробовал pgAdmin и приложение rails, подключающееся к базе данных на этом сервере. Оба одинаковые. - person Yunwei.W; 09.01.2014
comment
Думаю, я уверен, я отредактировал правильный файл конфигурации. Я даже изменил локальный доступ на md5. Теперь при локальном доступе запрашивается пароль. Но для удаленного доступа можно использовать пустой пароль. Я весьма озадачен. - person Yunwei.W; 09.01.2014
comment
Странно - попробуйте заменить md5 на reject в строке, содержащей 0.0.0.0/0. Тогда вы вообще не сможете войти удаленно. Если это не так, то это определенно не тот файл, который используется вашим сервером. - person golem; 09.01.2014
comment
Я только что попробовал с reject, как вы сказали. Теперь он отклоняет подключение пользователя postgres к базе данных. Кажется, файл конфигурации правильный. Затем я снова изменил отклонение на md5. И ПУСТОЙ пароль снова получил доступ..... - person Yunwei.W; 09.01.2014
comment
Я вижу два объяснения такому поведению. Во-первых, хэш md5 вашего пароля точно такой же, как хэш пустой строки, тогда мне действительно интересно узнать, что это такое? :) Кроме того, конфигурация, которую вы вставили, не является полной, и где-то есть строка типа host all postgres 0.0.0.0/0 trust (может быть, кто-то добавил ее намеренно как бэкдор для вашей базы данных?). - person golem; 09.01.2014
comment
ха-ха, первое объяснение вряд ли произойдет, верно? Во втором случае я просто создал пустой файл pg_hba.conf и вставил в него чистые настройки. Но, похоже, проблема остается. - person Yunwei.W; 09.01.2014

это мои настройки. ты скучаешь по другим, может быть

# 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
person devanand    schedule 09.01.2014

О, **! Наконец, я нашел ответ на эту проблему. Итак, причина, по которой мне не нужен пароль для доступа к моему серверу базы данных, заключается в том, что .pgpass файл сохранил мой пароль на моем локальном компьютере. Так что мне не нужно вводить пароль для подключения к удаленному серверу.

Я никогда не знал, что файл .pgpass будет работать таким образом. Итак, если кто-то новичок в postgresql, как я. Надеюсь, это может помочь.

Спасибо за все остальные ответы!

person Yunwei.W    schedule 09.01.2014