когда я создаю нового пользователя, но он не может войти в базу данных.
Я делаю это так:
postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y
затем создайте базу данных:
postgres@Aspire:/home/XXX$ createdb -O dev test_development
после этого я пытаюсь psql -U dev -W test_development
войти, но получаю ошибку:
psql: FATAL: Peer authentication failed for user "dev"
Я пытался решить проблему, но не смог.
postgresql
hsming
источник
источник
--interactive
в команду:createuser --interactive joe
Ответы:
Пытаться:
где
-U
это имя пользователя базы данных-h
это имя хоста / IP локального сервера, что позволяет избежать доменных сокетов Unix-d
имя базы данных для подключенияЗатем Postgresql оценивает это как «сетевое» соединение, а не соединение с сокетом домена Unix, поэтому не оценивается как «локальное» соединение, как вы можете видеть в
pg_hba.conf
:источник
psql [option...] [dbname [username]]
, что можно подумать,psql dbname username
что это сработает ..\c glossary john
FATAL: Peer authentication failed for user "john"
затем с\c glossary john localhost
Password for user john:
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)
You are now connected to database "glossary" as user "john" on host "localhost" at port "5432".
ним работал.Ваше соединение не удалось, потому что по умолчанию
psql
подключается через сокеты UNIX с использованиемpeer
аутентификации, для которой у текущего пользователя UNIX должно быть то же имя, что и у пользователяpsql
. Таким образом, вам придется создать пользователя UNIX,dev
а затем войти в системуdev
или использоватьsudo -u dev psql test_development
для доступа к базе данных (и неpsql
должен запрашивать пароль).Если вы не можете или не хотите создавать пользователя UNIX, например, если вы просто хотите подключиться к своей базе данных для специальных запросов, принудительное подключение через сокет
psql --host=localhost --dbname=test_development --username=dev
(как указано в ответе @meyerson) решит вашу непосредственную проблему.Но если вы намереваетесь принудительно установить аутентификацию по паролю через сокеты Unix вместо однорангового метода, попробуйте изменить следующую
pg_hba.conf
* строку:из
в
peer
означает, что он будет доверять личности (подлинности) пользователя UNIX. Так что не спрашиваю пароль.md5
означает, что он всегда будет запрашивать пароль и проверять его после хешированияMD5
.Конечно, вы также можете создавать более конкретные правила для конкретной базы данных или пользователя, при этом некоторые пользователи
peer
а другие требуют пароли.После изменения,
pg_hba.conf
если PostgreSQL работает, вам нужно перечитать конфигурацию путем перезагрузки (pg_ctl reload
) или перезапуска (sudo service postgresql restart
).* Файл
pg_hba.conf
скорее всего будет в/etc/postgresql/9.x/main/pg_hba.conf
Отредактировано: замечания @Chloe, @JavierEH, @Jonas Eicher, @fccoelho, @Joanis, @Uphill_What комментарии включены в ответ.
источник
peer
Иmd5
? Когда я установилmd5
, я больше не могу войти сpostgres
пользователем! Я попытался добавить несколько строк и разделить метод запятыми, но они не сработали. Хорошо, я нашелmgoldwasser
ответ, и это сработало. Я просто добавил еще одну строку для пользователяpostgres
с методомpeer
!/var/lib/pgsql/9.4/data/pg_hba.conf
Одноранговая аутентификация означает, что postgres запрашивает у вашей операционной системы ваше имя для входа и использует его для аутентификации. Чтобы войти в систему как пользователь "dev" с использованием одноранговой аутентификации на postgres, вы также должны быть пользователем "dev" в операционной системе.
Вы можете найти подробную информацию о методах аутентификации в документации Postgresql .
Подсказка: если метод аутентификации больше не работает, отключите сервер от сети и используйте метод «trust» для «localhost» (и дважды проверьте, что ваш сервер недоступен через сеть, пока включен метод «trust»).
источник
dev
системного пользователяXXX
Когда вы указываете:
он подключается через сокет UNIX, который по умолчанию использует
peer
аутентификацию, если не указано вpg_hba.conf
иное.Вы можете указать:
получить соединение TCP / IP по интерфейсу обратной связи (как IPv4, так и IPv6) для указанного
database
иuser
.После изменений вы должны перезапустить postgres или перезагрузить его конфигурацию. Перезапустите, что должно работать в современных дистрибутивах на основе RHEL / Debian:
Перезагрузка должна работать следующим образом:
но команда может отличаться в зависимости от конфигурации PATH - вам может потребоваться указать абсолютный путь, который может отличаться в зависимости от способа установки postgres.
Тогда вы можете использовать:
авторизоваться с
user
указаннымdatabase
через TCP / IP.md5
обозначает зашифрованный пароль, в то время как вы можете также указатьpassword
обычные текстовые пароли во время авторизации. Эти 2 варианта не должны иметь большого значения, если сервер баз данных доступен только локально, без доступа к сети.Важное примечание: Порядок определения в
pg_hba.conf
вопросах - правила читаются сверху вниз, подобно iptables, поэтому вы, вероятно, захотите добавить предложенные правила над правилом:источник
Хотя ответ @ flaviodesousa будет работать, он также делает обязательным для всех пользователей (всех остальных) ввод пароля.
Иногда имеет смысл оставить одноранговую аутентификацию для всех остальных, но сделать исключение для пользователя службы. В этом случае вы захотите добавить в файл pg_hba.conf строку, которая выглядит следующим образом:
Я бы порекомендовал вам добавить эту строку прямо под строкой заголовка с комментариями:
Вам нужно будет перезапустить PostgreSQL, используя
Если вы используете 9.3, ваш pg_hba.conf, скорее всего, будет:
источник
Это работает для меня, когда я сталкиваюсь с этим:
источник
dev
.Самое простое решение:
источник
Я просто должен был добавить
-h localhost
источник
В моем случае я использовал другой порт. По умолчанию 5432. Я использовал 5433. Это сработало для меня:
источник
Для людей, которые в будущем увидят это,
postgres
это/usr/lib/postgresql/10/bin
на моем сервере Ubuntu.Я добавил его в PATH в моем файле .bashrc и добавил эту строку в конце
затем в командной строке
Я обновил свою среду Bash. Теперь я могу использовать
postgres -D /wherever
из любого каталогаисточник
pg_dump -h localhost -U postgres -F c -b -v -f mydb.backup mydb
источник
-U postgres
быть ключевым? Что это за буквы ?Пытаться:
psql -U имя_ роли -d база данных -h имя_хоста..com -W
источник