Назад | Перейти на главную страницу

Непонимание аутентификации для локального соединения psql

У меня только что установленная машина CentOS 6.8. Я установил его с опцией сервера базы данных, поэтому postgresql 8.4 был установлен. После установки запустил:

[root@test-ekaterina ~]# service postgresql start

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.
                                                           [FAIL]
[root@test-ekaterina ~]# service postgresql initdb
[.initialization message not in english..]                                [  OK  ]
[root@test-ekaterina ~]# service postgresql start
[.initialization message not in english..]:                            [  OK  ]
[root@test-ekaterina ~]# ps -ef | grep postgres
postgres 10835     1 22 17:07 ?        00:00:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
postgres 10839 10835  0 17:07 ?        00:00:00 postgres: logger process                          
postgres 10841 10835  0 17:07 ?        00:00:00 postgres: writer process                          
postgres 10842 10835  0 17:07 ?        00:00:00 postgres: wal writer process                      
postgres 10843 10835  0 17:07 ?        00:00:00 postgres: autovacuum launcher process             
postgres 10844 10835  0 17:07 ?        00:00:00 postgres: stats collector process                 
root     10846 10687  0 17:07 pts/0    00:00:00 grep postgres
[root@test-ekaterina ~]# psql -U postgres
psql: FATAL:  Ident authentication failed for user «postgres»
[root@test-ekaterina ~]# psql -U postgres postgres
psql: FATAL:  Ident authentication failed for user «postgres»
[root@test-ekaterina ~]# psql -U postgres -h localhost postgres
psql: FATAL:  Ident authentication failed for user «postgres»
[root@test-ekaterina pg_log]# psql
psql: FATAL:  Ident authentication failed for user «root»
[root@test-ekaterina pg_log]# sudo -u postgres psql
postgres=#

Файл конфигурации pg_hba.conf сразу после установки имеет:

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               ident
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident
# IPv6 local connections:
host    all         all         ::1/128               ident

В первой строке, в которой говорится local all all ident Я бы ожидал psql -U postgres чтобы подключиться к локальной базе данных postgres, потому что [Документация PG] говорит:

пользователь Указывает, каким именам пользователей базы данных соответствует эта запись. Значение все указывает, что он соответствует всем пользователям.

Вместо этого возникает ошибка аутентификации. Но бег psql команда с sudo, как пользователь postgres CentOS, работает нормально. Это заставляет меня думать, что PostgreSQL каким-то образом использует * nix user plus psql -U пользователь для аутентификации доступа. Почему это? Что мне не хватает? Конечно, если я изменю pg_hba.conf файл и замените первую строку на local all all trust работает отлично. Но я хочу понять, почему я должен олицетворять выполнение psql, если файл psql принадлежит пользователю root:

[root@test-ekaterina pg_log]# ls -l /usr/bin/psql
-rwxr-xr-x. 1 root root 342984 oct  5  2017 /usr/bin/psql