Недавно я заменил установку MariaDB на сервере CentOS 7 на MySQL Community Edition 5.7. Предыдущая установка была настроена так, чтобы разрешить одноранговую аутентификацию для пользователя root, и я попытался реплицировать ту же настройку с новой установкой.
После переустановки MySQL и повторной инициализации каталога базы данных (/var/lib/mysql
), Я включил auth_socket
плагин в /etc/my.cnf
:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
plugin-load-add=auth_socket.so
Затем я подключился к MySQL, используя автоматически созданный временный пароль root, и установил root
пользователь для использования auth_socket
:
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
FLUSH PRIVILEGES;
После внесения этого изменения, когда я пытаюсь подключиться к базе данных с помощью sudo mysql -u root
, Я получаю сообщение об ошибке «Доступ запрещен»:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Я также не могу войти в систему с временным паролем, который работал до того, как я обновил пользователя.
Есть ли какой-то тонкий шаг настройки, который я мог бы пропустить?
Предполагая, что вы перезапустили сервер после изменений в cnf-файле, вы можете попробовать добавить вторую строку в .cnf
так что сервер откажет, если плагин не инициализируется успешно:
plugin-load-add=auth_socket.so
auth_socket=FORCE_PLUS_PERMANENT
Таким образом, вы сможете сузить проблему. Или вы можете попробовать зарегистрировать плагин во время выполнения из mysql:
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Я не могу комментировать ответ выше, поэтому вот мой "собственный" ответ:
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
не работает, по крайней мере, с MariaDB (5.5) на CentOS 7. Для Mariadb это должно выглядеть так:
INSTALL PLUGIN unix_socket SONAME 'auth_socket.so';
(см. документацию здесь https://mariadb.com/kb/en/library/authentication-plugin-unix-socket/
После этого сделайте
update user set plugin = 'unix_socket' where user='root';
FLUSH PRIVILEGES;
перезапустите mariadb и войдите без пароля для пользователя root (например, для резервных копий crontab)