Я только что установил MariaDb
на свежем Ubuntu Gnome и запустил mysql_secure_installation после этого я установил приличный пароль администратора, удалил анонимного пользователя и т. д.
Впоследствии я заметил странное поведение с паролем администратора:
mysql -u root -p
У меня всегда появляется ошибка: ERROR 1698 (28000): Access denied for user 'root'@'localhost'
sudo mysql -u root -p
, Я всегда получаю доступ к базе данных, независимо от того, какой пароль я на самом деле ввожу ...Это нормальное поведение, я что-то делаю не так или я как-то облажался с установкой?
Такое поведение кажется совместимым с включением плагин для проверка подлинности сокета для пользователя root, где MariaDB доверяет учетным данным операционной системы, полученным через сокет, и не полагается на пароль. Используя sudo
или войдя в систему как root, вы можете подключиться к серверу базы данных как root, потому что вы root в ОС, но другие пользователи ОС не могут.
Вы можете удалить эту опцию с помощью:
$ sudo mysql -u root
mysql> use mysql;
mysql> update user set plugin='' where User='root';
mysql> flush privileges;
и тогда вы получите ожидаемое поведение: любой пользователь, у которого есть пароль root MariaDB, должен иметь возможность войти в систему как root.
Альтернативой является создание другого пользователя, а не root, который также имеет полные права администратора, и использовать его вместо root для административных целей:
$ sudo mysql -u root
mysql> CREATE USER 'finley'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'finley'@'localhost'
-> WITH GRANT OPTION;
Ответ от HBruijn указал использовать
update user set plugin='' where User='root';
Однако это сломало для меня систему входа в систему, так как никто больше не мог войти в систему (независимо от того, используется ли правильный пароль или нет, и sudo или нет)
Чтобы заставить его работать, мне нужно было использовать это вместо этого:
update user set plugin="mysql_native_password" where User='root';