虽然设置了密码,但无需输入密码就可以以root身份访问MySQL,这正常吗?

虽然设置了密码,但无需输入密码就可以以root身份访问MySQL,这正常吗?

我刚刚在 Ubuntu 18.04 上安装了 MySQL(Ver 14.14 Distrib 5.7.22),发现了一些奇怪的事情:

我安装了 MySQL 并mysql_secure_installation为 root 设置了密码,但是只要我使用具有 sudo 权限的任何用户登录 SSH,我就可以直接访问 MySQL,而无需通过mysql -u root或通过输入密码mysql -u root -p并只需单击 ENTER(当询问“输入密码:”时)。

这是正常的吗?

我从以前的版本中知道,当我想要访问 MySQL 时,我总是必须输入密码,即使使用 sudo。

答案1

Ubuntu 的 MySQL 软件包(基于 Debian 的软件包)默认使用该auth_socket插件。使用此插件从本地计算机连接时不需要密码,但服务器会识别操作系统用户并匹配该用户。因此,如果您是系统的 root 用户并登录,您将成为 root 用户。这避免了必须先设置 MySQL root 密码。

也可以看看https://wiki.debian.org/MySql

答案2

你应该跑SHOW GRANTS FOR 'root'@'localhost';

如果结果中显示此行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED VIA unix_socket WITH GRANT OPTION

而不是这一行:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' WITH GRANT OPTION

这意味着 root 用户会自动通过 unix 套接字凭据进行身份验证。如果您不想这样做,您可以发出手动 GRANT 命令(不要这样做会自食其果),该命令将覆盖之前的命令,例如:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'mysecurepassword' WITH GRANT OPTION;

现在 mysql 会要求输入密码,但任何能够访问 unix 套接字的用户都可以使用(因此默认情况下,无需mysql -u root -proot 身份即可使用,但当然需要知道密码)。您必须考虑哪一个更安全。

我不知道为什么mysql_secure_installation不解释这一点。

答案3

在装有 MySql 5.7 的 Ubuntu 18.04 上,这根本不起作用。执行以下操作:

使用 mysql

从用户中选择插件,其中用户='root';

您会注意到该插件是“auth_socket”,它是造成我们不喜欢的行为的原因。

要更改此设置,您必须更改插件并在同一命令中设置密码。可以按以下方式完成:

更改用户“root”@“localhost”,使用MYSQL_NATIVE_PASSWORD 通过“mypass”标识;

刚刚完成并且有效!

相关内容