我刚刚在 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 密码。
答案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 -p
root 身份即可使用,但当然需要知道密码)。您必须考虑哪一个更安全。
我不知道为什么mysql_secure_installation
不解释这一点。
答案3
在装有 MySql 5.7 的 Ubuntu 18.04 上,这根本不起作用。执行以下操作:
使用 mysql
从用户中选择插件,其中用户='root';
您会注意到该插件是“auth_socket”,它是造成我们不喜欢的行为的原因。
要更改此设置,您必须更改插件并在同一命令中设置密码。可以按以下方式完成:
更改用户“root”@“localhost”,使用MYSQL_NATIVE_PASSWORD 通过“mypass”标识;
刚刚完成并且有效!