Проблема аутентификации с MySQL 8 с использованием qt - PullRequest
3 голосов
/ 11 июня 2019

Я занимаюсь разработкой приложения qt (5.12.2), которое может подключаться к серверу mysql.Недавно я попытался подключиться к серверу MySQL 8.Мне не удалось подключиться, и я получил следующее сообщение об ошибке:

Authentication plugin 'caching_sha2_password' cannot be loaded: The specified module could not be found.

После некоторых копаний я обнаружил, что проблема была в новом шифровании, реализованном в mysql 8.

OneЧтобы обойти эту проблему, нужно было установить на сервере устаревший метод аутентификации.

Есть ли решение без возврата к устаревшей аутентификации?

1 Ответ

2 голосов
/ 18 июня 2019

Существует 2 возможных проблемы, которые могут вызвать эту проблему.

  1. Вы используете старый способ и подключаетесь к драйверу QMYSQL с помощью коннектора MySQL Connector / C (libmysqlclient.dll), который неподдерживает MySQL 8 и новый метод аутентификации.
  2. Второй способ заключается в том, что вы используете драйвер QODBC со старым выпуском (<8.0), который не поддерживает новый метод аутентификации. </li>

Вы можете легко решить эту проблемупутем переключения или обновления до последней версии драйвера QODBC.Вы можете скачать последнюю версию со страницы загрузки MySQL .С этим небольшим примером и с правильным разъемом это будет работать.

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};Server=example.com;Database=test;Uid=user;Port=3306;Pwd=password;WSID=.");
if (!db.open()) {
    qDebug() << db.lastError().text();
} else {
    qDebug("success");
}
...