我的家庭系统上运行着 mysql。我正在尝试使用 access(尝试允许从 localhost 以外的其他主机进行访问),如果锁定了我的 root 用户,那么我就成了一个彻底的数据库菜鸟/失败者。
目前我能进入的唯一方法是使用 --skip-grant-tables & 选项启动 mysqld_safe 进程(谷歌搜索后发现)。
我已尝试 UPDATE User set Host='localhost' where user='root'; 但这似乎不起作用。
有没有办法“重新开始”?我仍然想保留数据,所以不想完全重新安装。
我并不担心安全问题,因为它只是我的本地机器(也就是说,快速修复就可以了)。只是在寻找“重置”选项之类的东西。我是一名 SQL 黑客,所以不怕命令行,只是不知道我在做什么。救命!:-(
答案1
在 --skip-grant-tables 期间,您不能使用 GRANT 或 REVOKE 语句,因此您不能使用内置函数来创建/删除用户。
您本质上想要在 mysql.user 表中创建/编辑一行。要自己执行此操作:
- 在另一台机器上使用 mysqldump 从 mysql.user 中获取 root 用户的行。然后,在“mysql”数据库上运行生成的 INSERT 查询命令。这将有效地复制该用户的全局权限,包括他们的密码。请记住在插入行后运行 FLUSH PRIVILEGES;。
- 或者,我为您挑选了一条 root 样式的访问线路。对于 MySQL 5 服务器,以下查询将创建一个具有完全访问权限的用户,用户名为“toor”,密码为“mypassword”:
Pastebin 链接(编辑:查询破坏了 SF 界面)
创建的用户只能从本地主机访问。祝你好运!
答案2
您可以使用 REVOKE 命令来删除权限,但您可能需要在运行该命令后检查 mysql 数据库中的 user、db、tables_priv 和 columns_priv 表,以确保它已完成您预期的操作。如果没有,您可以删除这些表中与您要查找的内容匹配的所有行。只需确保 user 中始终有一行具有以下内容:
Host: localhost
User: root
password:
您可能在其中设置了密码。如果没有密码,您可以从本地计算机以 root 身份登录数据库。如果有其他人可以登录服务器,这显然不是理想的选择。
您应该记住的一件事是,无论何时修改权限(使用 GRANT/REVOKE 或自己修改表),都要运行
mysql> FLUSH PRIVILEGES;
让 mysql 注意到这些变化。
答案3
我见过的解决密码丢失问题最快的方法是初始化文件配置选项:
- 在您的 /etc/my.cnf(在 Debian 中:/etc/mysql/my.cnf)中添加:
[mysqld] #this should already be here, add the following line after it
init-file = /tmp/init.sql - 在该文件中放入授权声明:
cat <<EOF>/tmp/init.sql
grant all privileges on *.* to 'temp'@'localhost' identified by 'temp' with grant option;
EOF - 重启mysql:
sudo /etc/init.d/mysql restart
- 删除步骤 1 中创建的行和步骤 2 中创建的文件。
现在您可以登录并使用适当的授予,撤销, 和显示赠款声明通过:mysql -utemp -ptemp
这是对MySQL 自己给出的建议。