我刚刚在Ubuntu18.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,我也必须输入密码。
发布于 2018-05-19 22:24:52
Ubuntu的MySQL包(基于Debian的)默认使用auth_socket
插件。使用此插件从本地机器连接时不需要密码,但服务器标识操作系统用户并与该用户匹配。因此,如果您是系统的根用户并登录,那么您将成为root用户。这避免了必须先设置MySQL根密码。
发布于 2018-05-19 19:00:42
您应该运行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
这意味着根用户自动通过unix套接字凭据进行身份验证。如果你不想这样做,你可以发出一个手动的格兰特命令(不要在做这件事的时候开枪打自己的脚),这将覆盖之前的命令,例如:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'mysecurepassword' WITH GRANT OPTION;
现在mysql将询问密码,但是任何能够访问unix套接字的用户都可以使用它(因此默认情况下只使用mysql -u root -p
,而不是根用户,当然知道密码)。你得考虑哪一个更安全。
我不知道为什么mysql_secure_installation
不解释这件事。
发布于 2019-04-14 21:59:32
在Ubuntu18.04和MySql 5.7中,这一点都不起作用。做以下工作:
使用mysql从用户处选择插件,其中user='root';
您会注意到插件是'auth_socket',这是我们不喜欢的行为的责任。
要改变这一点,您必须更改插件,并在同一个命令中设置密码。这样做是可以的:
通过‘mypass’更改与MYSQL_NATIVE_PASSWORD标识的用户'root'@'localhost‘;
刚做完就成功了!
https://serverfault.com/questions/912941
复制相似问题