我正在尝试在Ubuntu(16.04.02)上设置MariaDB(10.0.29)。安装完成并启动进程(sudo service mysql start
)后,即使我最初将密码设置为空白,也无法以root
身份登录。
即mysql -u root
将拒绝我访问。我通过sudo mysql
登录并检查了用户表,即。 select user, password, authentication_string from mysql.user
和预期的一样:
+---------+----------+-----------------------+
| User | password | authentication_string |
+---------+----------+-----------------------+
| root | | |
+---------+----------+-----------------------+
我还创建了一个新用户,即。 create user 'test'@'localhost' identified by '';
当我尝试mysql -u test
(空密码)时,它会按预期工作并让我登录。
用户表如下所示:
+---------+----------+-----------------------+
| User | password | authentication_string |
+---------+----------+-----------------------+
| root | | |
| test | | |
+---------+----------+-----------------------+
那么,任何人都可以告诉我为什么我无法使用空密码登录root
,但我可以test
登录?
答案 0 :(得分:16)
与本机MariaDB软件包(由MariaDB本身提供的软件包)不同,默认情况下由Ubuntu生成的软件包对本地根进行unix_socket认证。要检查,请运行
SELECT user, host, plugin FROM mysql.user;
如果您在unix_socket
列中看到plugin
,那就是原因。
要返回常规密码验证,请运行
UPDATE mysql.user SET plugin = '' WHERE plugin = 'unix_socket';
FLUSH PRIVILEGES;
(选择适合您目的的WHERE
子句,上面只是一个例子)
答案 1 :(得分:1)
我挣扎了一段时间。默认情况下,我的Ubuntu附带MariaDB(10.0.31)。重新安装几次并将插件更改为各种建议后 - 我仍然无法正确登录到mysql。
最后我从repo安装了最新的MariaDB(10.2.12): https://downloads.mariadb.org/mariadb/repositories/
我能够立即正确登录。
答案 2 :(得分:1)
您遇到的问题归因于MariaDB 10.4的身份验证系统的更改:
作为上述更改的结果,对所有人开放的强大根帐户最终消失了。 (...),因为根帐户是自动安全创建的。它们的创建方式为:通过unix_socket或mysql_native_password使用“无效”来创建用户root @ localhost标识
如果您确实要以root
的身份访问数据库,则应通过cli mariadb -p
登录并运行:
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("your-password-here");
关于下面的另一个解决方案:它们不起作用,因为MariaDB也不允许您更新plugin
列:ERROR 1348 (HY000): Column 'plugin' is not updatable
。