/
/
Смена плагина авторизации пользователей MySQL

Смена плагина авторизации пользователей MySQL

Плагин авторизации mysql_native_password считается устаревшим начиная с MySQL версии 8.0, он также отключен в версии 8.4.

Внимание!

Начиная с MySQL версии 9.0 плагин mysql_native_password удален из комплектации MySQL и недоступен для использования!

В связи с этим, рекомендуется использовать плагин caching_sha2_password. Чтобы перевести пользователей сервера MySQL, потребуется обновить данные в таблице user базы данных mysql для каждого пользователя, использующего устаревший плагин.

Чтобы вывести список всех пользователей, использующих плагин mysql_native_password, используйте запрос:

SELECT user, host, plugin FROM mysql.user where plugin = "mysql_native_password";

Если вы знаете пароль пользователя, используйте следующий шаблон запроса для каждого отдельного пользователя:

ALTER USER "<имя_пользователя>"@localhost IDENTIFIED WITH caching_sha2_password BY "<пароль_пользователя>";

Ниже описан запрос для смены плагина авторизации для всех пользователей, использующих mysql_native_password с генерацией случайных паролей для них.

После генерации случайных паролей пользователям баз данных, будет нарушена работа сайтов и приложений, подключенных к этим базам данных!

Потребуется изменить пароли или сообщить пользователям о необходимости указания актуальных паролей через панель в разделе Базы данных - Пользователи БД, даже если в поле Пароль уже указан актуальный - это связано с тем, что пароль в панели не обновляется, если он был изменен вручную через базу данных.

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

SELECT 
    user,
    host,
    SUBSTRING(MD5(RAND()) FROM 1 FOR 16) AS new_password,
    CONCAT(
        "ALTER USER '", user, "'@'", host, 
        "' IDENTIFIED WITH caching_sha2_password BY '", 
        SUBSTRING(MD5(RAND()) FROM 1 FOR 16), 
        "';"
    ) AS alter_command
FROM mysql.user
WHERE plugin = 'mysql_native_password'
AND user NOT IN ('mysql.session', 'mysql.sys', 'mysql.infoschema');

Если необходимо изменить плагин авторизации для конкретного пользователя обратно на устаревший, используйте запросы:

ALTER USER "<имя_пользователя>"@"localhost" IDENTIFIED VIA mysql_native_password USING PASSWORD("<пароль_пользователя>");
FLUSH PRIVILEGES;