我如何刷新一切就mysql的权限

我有我的家庭系统上运行的MySQL。 我正在玩access(试图允许从本地主机以外的其他访问),并作为一个完整的数据库noob /失败者,如果locking我的root用户。

我现在唯一可以进入的方法是使用–skip-grant-tables&选项(在Googlesearch后发现)启动一个mysqld_safe进程。

我试过更新用户设置主机='本地主机'其中用户='根'; 而这似乎并不奏效。

有没有办法“开始新鲜”? 我仍然想保留这些数据,所以不想真正重新安装。

我不担心安全,因为它只是我的本地盒子(即快速和肮脏的修复将做)。 只是寻找一个“重置”选项或东西。 我是一个SQL黑客,所以不怕命令行,只是不知道我在做什么。 帮帮我! 🙁

在–skip-grant-tables期间,不能使用GRANT或REVOKE语句,所以不能使用内置的函数来创build/删除用户。

你基本上想要在mysql.user表中创build/编辑一行。 要自己做到这一点:

  • 在另一台机器上使用mysqldump来从mysql.user中获取root用户的行。 然后,在你的“mysql”数据库上运行得到的INSERT查询命令。 这将有效地复制该用户的全局权限,包括他们的密码。 记得运行FLUSH PRIVILEGES; 插入行后。
  • 或者,我已经为您挑选了一个根风格的访问线。 对于MySQL 5服务器,以下查询将创build一个具有用户名“toor”,密码“mypassword”的完全访问用户:

Pastebin链接 (编辑:查询正在打破SF接口)

创build的用户只能从本地主机访问。 祝你好运!

您可以使用REVOKE命令来删除权限,但您可能需要在运行mysql数据库后检查用户,db,tables_priv和columns_priv表,以确保它已经完成了您所期望的操作。 如果没有,您可以删除这些表中与您正在查找的内容相匹配的所有行。 只要确保你总是有一个用户行中有:

Host: localhost User: root password: 

你可能有一个密码在那里。 如果没有密码,您可以从本地机器以root身份login到数据库。 显然,如果有其他人可以login服务器,这并不理想。

你应该记住的一件事是,当你修改权限时,使用GRANT / REVOKE或者自己修改表,就是运行

 mysql> FLUSH PRIVILEGES; 

使MySQL注意到这些变化。

我见过的解决密码丢失问题的最快方法是使用init-file config选项 :

  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中创build的行和步骤2中创build的文件。

现在,您可以通过正确的GRANT , REVOKE和SHOW GRANTS FOR语句login并进行更正: mysql -utemp -ptemp

这是对MySQL自己在这里给出的build议的改进。