![MySQL 允许无密码登录,但不允许我运行任何程序](https://linux22.com/image/585019/MySQL%20%E5%85%81%E8%AE%B8%E6%97%A0%E5%AF%86%E7%A0%81%E7%99%BB%E5%BD%95%EF%BC%8C%E4%BD%86%E4%B8%8D%E5%85%81%E8%AE%B8%E6%88%91%E8%BF%90%E8%A1%8C%E4%BB%BB%E4%BD%95%E7%A8%8B%E5%BA%8F.png)
我试图允许远程登录 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