Если вы только что перешли на MySQL 8.0, вы, возможно, видели, что плагин аутентификации по умолчанию был изменен на более безопасный: caching_sha2_password.
Теперь давайте выясним, как пользователи Perl могут работать с MySQL 8.0.
Драйвер для использования MySQL с Perl – perl-DBD-MySQL . MySQL 8.0 поддерживается, но новый плагин аутентификации может отсутствовать. Это зависит от библиотеки mysql, связанной во время компиляции модуля.
Ошибка, с которой вы можете столкнуться, заключается в следующем:
DBI connect('host=localhost','fred',...) failed: Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory at ./perl_example.pl line 8.
Поэтому, если вы столкнулись с этой проблемой при использовании perl-DBD-MySQL для подключения к MySQL 8.0, у вас должен быть драйвер, который еще не поддерживает новый плагин. Если это так, самым быстрым, простым, но не самым безопасным решением является использование более старого плагина аутентификации: mysql_native_password.
Чтобы проверить, какой плагин аутентификации использует пользователь, вы можете выполнить следующий запрос:
mysql> select user, plugin from mysql.user where user='fred'; +------+-----------------------+ | user | plugin | +------+-----------------------+ | fred | caching_sha2_password | +------+-----------------------+
Вы можете видеть, что это новый, используемый в MySQL 8.0. Давайте изменим его:
mysql> alter user 'fred' identified with 'mysql_native_password' by 'mysecurepasswd';
Обратите внимание, что вам нужно установить пароль.
Пожалуйста, не изменяйте вручную таблицу mysq.user с помощью оператора update.
Если вы хотите использовать новый безопасный механизм аутентификации, вам нужно проверить, связан ли ваш модуль perl-DBD-MySQL с библиотекой, которая его поддерживает:
$ ldd /usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so | grep 'mysql\|maria' libmysqlclient.so.18 => /usr/lib64/mysql/libmysqlclient.so.18 (0x00007f0f632ee000)
Эта версия ( libmysqlclient.so.18) не поддерживает новый плагин аутентификации. Вам нужно иметь хотя бы libmysqlclient.so.21 или libmariadb.so.3.
По умолчанию в CentOS/RHEL/OL 7 perl-DBD-MySQL связан со старой версией mariadb-libs(5.5) или с использованием mysql-community-libs-compat (особенно если вы обновились до 8.0.x).
В последней версии Fedora это не так:
$ ldd /usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so | grep 'mysql\|maria' libmariadb.so.3 => /lib64/libmariadb.so.3 (0x00007fecbc8b6000)
Эта библиотека установлена затем, что mariadb-connector-c-3.0.10 поддерживает новый механизм аутентификации MySQL 8.0.
MySQL 8.0 становится все более и более популярным, и даже другие коннекторы, чем родные, теперь поддерживают его. Конечно, если вы хотите использовать его в одной системе, в которой еще не используются последние версии, вам нужно иметь последние библиотеки, но это не очень сложно.