Ошибка Mikro-orm: сбой аутентификации по паролю для пользователя «postgres»

#postgresql #ubuntu-18.04 #postgresql-12 #mikro-orm

#postgresql #ubuntu-18.04 #postgresql-12 #mikro-orm

Вопрос:

Я пытаюсь написать код в соответствии с этим руководством по React GraphQL TypeScript

Проект использует MikroOrm для связи с базой данных PostgreSQL. У меня установлен PostgreSQL (12.4) на моем Ubuntu 18.04, создан пользователь «postgres», и я могу войти в систему с пользователем и запустить psql без каких-либо проблем. Однако, когда я начинаю использовать такие mikro-orm команды, как npx mikro-orm migration:create (временная метка видео), я получаю следующую ошибку:

 error: password authentication failed for user "postgres"
    at Parser.parseErrorMessage (/home/<username>/newstack/node_modules/pg-protocol/src/parser.ts:357:11)
    at Parser.handlePacket (/home/<username>/newstack/node_modules/pg-protocol/src/parser.ts:186:21)
    at Parser.parse (/home/<username>/newstack/node_modules/pg-protocol/src/parser.ts:101:30)
    at Socket.<anonymous> (/home/<username>/newstack/node_modules/pg-protocol/src/index.ts:7:48)
    at Socket.emit (events.js:315:20)
    at Socket.EventEmitter.emit (domain.js:483:12)
    at addChunk (_stream_readable.js:295:12)
    at readableAddChunk (_stream_readable.js:271:9)
    at Socket.Readable.push (_stream_readable.js:212:10)
    at TCP.onStreamRead (internal/stream_base_commons.js:186:23) {
  length: 104,
  severity: 'FATAL',
  code: '28P01',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'auth.c',
  line: '333',
  routine: 'auth_failed'
}
  

Вот ошибка в файле журнала PostgreSQL:

 2020-08-28 01:45:18.218 EEST [23088] postgres@newstack FATAL:  password authentication failed for user "postgres"
2020-08-28 01:45:18.218 EEST [23088] postgres@newstack DETAIL:  Password does not match for user "postgres".
    Connection matched pg_hba.conf line 96: "host    all             all             127.0.0.1/32            md5"
  

И вот мой pg_hba.conf:

 local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
  

Я понял, что если бы соединение было локальным, то для него не требовался бы пароль, но почему он не использует локальный сокет? Если это невозможно изменить, то как я могу предоставить MikroOrm свои учетные данные базы данных?

Ответ №1:

Измените «md5» на «trust» следующим образом:

 local   all             all                                     peer
host    all             all             127.0.0.1/32            trust
host    all             all             ::1/128                 trust
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5
  

Ответ №2:

Для меня это сработало после того, как я добавил

 clientUrl: 'http://localhost:5433'
user: 'postgres',
password: <user pasword for postgres user>
  

в объекте параметров

Комментарии:

1. Я попытался добавить это в конфигурацию (mikro-orm.config.ts в видео), но это все еще не работает. Я знаю, что место было правильным, потому что изменение номера порта приводит к другой ошибке. Я также пытался изменить пароль пользователя postgres с помощью sudo passwd postgres .

Ответ №3:

Это решение сработало для меня. Добавьте user и password реквизиты в конфигурацию mikro-orm:

 dbName: "lireddit",
user: "<user_name>",
password: "<password>",
  

Ответ №4:

Убедитесь, что вы установили ts-node как devDep

 npm i -D ts-node
  

и поместите в файл mikro-orm.config.ts имя пользователя и пароль postgres в качестве свойств