MySQL 允许无密码登录,但不允许我运行任何程序

MySQL 允许无密码登录,但不允许我运行任何程序

我试图允许远程登录 MySQL,因此我将/etc/mysql/my.cnf绑定到0.0.0.0改为127.0.0.1(我会马上把它放回去,我保证!),但是它不起作用,因此我尝试将用户 root 的主机更改为 * (后来我意识到应该是 %)。无论如何,我现在甚至无法在本地登录 MySQL 服务器,除非我尝试在没有密码的情况下登录,在这种情况下它会让我进入,但是当我尝试执行任何命令时,它会通知我无权这样做并且我是用户''@'localhost'。我已经关闭了服务器并使用 运行它--skip-grant-tables,这使我能够以 root 身份登录并且我实际上可以执行一些操作,但是我不确定如何恢复正常的本地密码 root 登录。我刚刚检查过,我的 PHP 应用程序(它有自己的一组凭据)运行良好。是的,我将绑定重新设置为127.0.0.1。如果不明显的话,我对 MySQL 还很陌生。

服务器正在运行 Ubuntu 12.04 LTS。

编辑:明确地说,我不是现在运行它--skip-grant-tables

答案1

首先--skip-grant-tables摆脱

service mysql restart

接下来,让我们确保mysql的root用户有正确的密码:

SELECT user,host FROM mysql.user WHERE password=PASSWORD('rootpassword');

如果没有任何结果,请像这样修复密码:

UPDATE mysql.user SET password=PASSWORD('rootpassword') WHERE user='root';
FLUSH PRIVILEGES;

接下来,让我们确保所有用户都有密码:

SELECT user,host FROM mysql.user WHERE password='';

如果出现问题,请删除这些用户:

DELETE FROM mysql.user WHERE password='';
FLUSH PRIVILEGES;

当我看到这条消息时

当我尝试执行任何命令时,它都会通知我,我没有权限执行该操作,并且我的用户是 ''@'localhost'。我已关闭服务器并使用 --skip-grant-tables 运行它,这使我能够以 root 身份登录,并且实际上我可以执行一些操作,但我不知道如何恢复正常的本地密码 root 登录

然后我对自己说:天哪,他有匿名登录。请按如下方式删除它们:

mysql -uroot -p -e"DELETE FROM mysql.user WHERE user=''; FLUSH PRIVILEGES;"

请从 mysql.db 中删除对测试数据库的所有引用

mysql -uroot -p -e"DELETE FROM mysql.db WHERE LEFT(db,4)='test'; FLUSH PRIVILEGES;"

这将保护你的 mysql 安装

答案2

您不应继续使用 来运行 mysql 服务器--skip-grant-table。否则,您将无法控制连接到您的服务器的用户!

您必须撤消对 root 用户(以及任何其他用户)所做的更改。完成后,只需停止 mysql 服务器并正常启动它即可。

答案3

启动 mysqld 后,--skip-grant-tables您应该登录到 mysql 并执行:


use mysql;
UPDATE user SET Host='%' WHERE Host='*' AND User='root';


之后从 mysql 注销并重新启动服务器(无需)--skip-grant-tables

尝试以 root 身份登录并检查一切是否正常。(权限等)

--skip-grant-tables仅用于管理目的,您不应该使用此参数正常运行 mysql

相关内容