Ошибка: ER_NOT_SUPPORTED_AUTH_MODE: клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотреть вопрос об обновлении клиента MySQL - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь подключиться к базе данных MySQL, используя приведенный ниже код.

var mysql      = require('mysql');
var connection = mysql.createConnection({
    host     : 'localhost',
    user     : 'root',
    password : 'pass',
    database : 'my_db',
    insecureAuth : true
});

connection.connect();

connection.query('SELECT 1 + 1 AS solution', function (error, results, fields) {
    if (error) throw error;
    console.log('The solution is: ', results[0].solution);
});

connection.end();

Но я получаю ошибку ниже:

Ошибка: ER_NOT_SUPPORTED_AUTH_MODE: клиент не поддерживает протокол аутентификации, запрошенный сервером; рассмотрите возможность обновления клиента MySQL

На моем локальном компьютере установлена ​​MySQL-installer-community-8.0.11.0.

Нужно ли устанавливать какие-либо другие разъемы для подключения к базе данных?

Ответы [ 5 ]

0 голосов
/ 02 июля 2019

У меня была такая же проблема, и у меня сработало это решение:

  1. Перейдите в рабочую среду MySQL и щелкните текущую базу данных.
  2. В окне навигатора (слева) нажмите Users and Privileges.
  3. Нажмите Add Account внизу списка пользователей.
  4. Дайте ему другое имя для входа (например, node_test).
  5. Установите тип аутентификации на Standard.
  6. Установите Limit to Host Matching на localhost.
  7. Установите новый пароль (например, coding-is-awesome).
  8. Вот как должен выглядеть ваш получившийся код:

    var mysql = require("mysql");
    
    var con = mysql.createConnection({
      host: "localhost",
      user: "node_test",
      password: "coding-is-awesome"
    });
    
    con.connect(function(err) {
      if (err) {
        console.log("Failed to connect");
        throw err;
      } else {
        console.log("Connected!");
      }
    });
    
0 голосов
/ 24 июля 2018

Я использую https://hub.docker.com/r/mysql/mysql-server/

В документе сказано:

MYSQL_ONETIME_PASSWORD: когда переменная истинна (что является ее состояние по умолчанию, если не установлено MYSQL_ROOT_PASSWORD или MYSQL_ALLOW_EMPTY_PASSWORD имеет значение true), пароль пользователя root установлен как просроченный и должен быть изменен перед использованием MySQL обычно. Эта переменная поддерживается только для MySQL 5.6 и более поздних версий.

Попробуйте установить MYSQL_ROOT_PASSWORD для вашей среды докера. Вам также может понадобиться изменить режим авторизации для вашего пользователя.

> mysql -u root -p

ALTER USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

работал для меня.

Редактировать: Чтобы проверить, какая аутентификация установлена:

SELECT user, plugin FROM mysql.user WHERE user = 'username';
0 голосов
/ 04 мая 2018

Вчера у меня была такая же проблема с моим контейнером докеров с mysql + nodejs. До сих пор я не нашел исправления, но в новой версии mysql (8.X) есть кое-что еще. После того, как я переустановил mysql с версией 5, у меня все заработало.

0 голосов
/ 04 мая 2018

Соединение MySQL (8.x) работает нормально, если мы выбираем устаревшее шифрование паролей MySQL (5.x) во время установки MySQL (8.x). Если во время установки я выбрал надежное шифрование пароля с помощью Mysql (8.x), оно не работает.

0 голосов
/ 03 мая 2018

Я бы попытался удалить строку insecureAuth: true и повторить попытку.

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