Почему Knex. js не проходит аутентификацию по паролю, когда в моей базе данных нет пароля? - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь подключиться к своей базе данных, используя Knex следующим образом:

const client = knex({
  client: 'postgresql',
  connection: {
    host: '127.0.0.1',
    user: 'me',
    database: 'my_db'
  }
});
client('some_table').then(console.log);

Когда я создавал базу данных (используя createdb my_db в командной строке), я не устанавливал пароль. В командной строке я могу запустить psql -d my_db, и он работает просто отлично.

Однако, когда я пытаюсь использовать Knex, я получаю сообщение об ошибке:

Ошибка необработанного отклонения: пароль аутентификация не удалась для пользователя "я"

Это происходит, независимо от того, установил ли я пароль null, пароль с пустой строкой (''), или полностью оставил поле вне конфигурации.

Может кто-нибудь объяснить, почему Knex настаивает на сбое аутентификации по паролю ... когда нет пароля (и когда я могу подключиться без пароля в командной строке просто отлично)?

1 Ответ

1 голос
/ 19 января 2020

PostgreSQL не разрешает вход в систему на основании наличия / отсутствия пароля. Скорее, все аутентификации входа в систему обрабатываются через pg_hba.conf. В вашем конкретном случае - создание пользователя me без пароля (или использование null или '', как вы его описали бы) - отсутствие пароля не обязательно позволяет вашему пользователю войти в систему. На самом деле, установка пароля не позволит этому пользователю войти в систему, если для pg_hba.conf не был установлен какой-либо параметр без пароля (например, peer или trust).

Если вы хотите без пароля вход в систему для пользователя me (я предполагаю, что для целей тестирования / разработки, поскольку вход в систему без пароля не является хорошей практикой безопасности на производстве), вы можете просто установить trust -уровневую аутентификацию в pg_hba.conf:

#conn_origin  database  user  ip_mask   auth_method
host          all       me    0.0.0.0/0 trust

Более безопасным методом реализации аутентификации без пароля будет использование файла .pgpass или установка переменной среды PGPASSWORD. Видя, что вы пытаетесь использовать knex. js, вам может быть лучше настроить pg_hba.conf, как указано выше. Опять же, я не знаю, каковы ваши намерения, но, пожалуйста, будьте в безопасности;)

Раскрытие информации: я работаю на EnterpriseDB (EDB)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...