如何清除 mysql 上与权限相关的所有内容

如何清除 mysql 上与权限相关的所有内容

我的家庭系统上运行着 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

我见过的解决密码丢失问题最快的方法是初始化文件配置选项

  1. 在您的 /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
  2. 在该文件中放入授权声明:
    cat <<EOF>/tmp/init.sql
    grant all privileges on *.* to 'temp'@'localhost' identified by 'temp' with grant option;
    EOF
  3. 重启mysql:
    sudo /etc/init.d/mysql restart
  4. 删除步骤 1 中创建的行和步骤 2 中创建的文件。

现在您可以登录并使用适当的授予撤销, 和显示赠款声明通过:mysql -utemp -ptemp

这是对MySQL 自己给出的建议

相关内容