【杂谈】MySQL越权限更改密码

KevinCheng

事情发生在前两天搭这个项目的时候。
好久没用自己电脑发布项目了。
MySQL丢了很久,毕竟平时做demo都是直接用的Navicat做调试,所以就没有再使用过那么长的密码了
结果搭建这个项目的时候呢需要用MySQL做数据库
就找了半天密码没找到。
就开始捣鼓越权限的事儿。
相信网上也有不少越权限修改MySQL密码的事情。
但是在我这儿最终没有完成这件事情。
大致算一个疑问点放在这儿。


关于网络上以及MySQL官方(How to Reset the Root Password)是如何解释越权

首先呢,官方给予的背景有三种。

  • If you have never assigned a root password for MySQL, the server does not require a password at all for connecting as root. However, this is insecure. For instructions on assigning a password, seeSection 2.10.4, “Securing the Initial MySQL Accounts”.
    如果你从来没有给root增加password,那么你可以直接登陆root,不需要password。当然了,这是非安全性的,所以如果你要是想要有一个密码,那么你点击后面的这个link就能直接带你去操作了。
    这也是最简单的,因为你root没有密码,直接使用命令进行赋值就好了。

  • If you know the root password and want to change it, see Section 13.7.1.1, “ALTER USER Syntax”, and Section 13.7.1.7, “SET PASSWORD Syntax”.
    如果你知道root的password,但是你想更改它,那么你直接根据下面的link,按照步骤去修改就好了,这一步也很简单,因为你知道password。进行一步alter就好了。

  • If you assigned a root password previously but have forgotten it, you can assign a new password. The following sections provide instructions for Windows and Unix and Unix-like systems, as well as generic instructions that apply to any system.
    这也是最终复杂的地方,因为你根本不知道password,那么只有绕过权限,你才能进行赋值。(其实这步按照操作来说也并不复杂,而这里我产生了一个问题。)

因为本章的内容只是我目前想记录自己内容用的,所以本章只谈论如何进行官方的越权修改密码操作,如果前两步有遇到问题的,可以评论互相讨论。


第一步 关闭你的MySQL服务,并使用相关命令完成越权限操作

  1. 关闭MySQL服务。
    如果你是Windows,那么直接service里找到MySQL的服务,直接停用就好了(这里的MySQL服务名一般是叫你的实例名,比如你的MySQL如果叫'MySQL 57',那么这里的服务名就叫MySQL 57);
    如果你是Linux等,那么直接MySQL stop就好了,或者你没有设置PATH,那么就service MySQL stop,或者你直接用MySQL所在地址stop就好了。

  2. 越权进入MySQL。
    这一步无论你是Windows还是Linux,直接进行命令行(Windows就直接打开cmd,Linux打开你的shell如果你是图形界面的话)操作就好了。
    这里必须要注意一点的是,无论你是Windows,还是你的Linux,请用管理员权限打开该命令行程序
    找到mysql所在的文件夹

    mysql --skip-grant-tables

     官方说为了保证安全,最好加上另一个命令--skip-networking
     加一起就是:
    

    mysql --skip-grant-tables --skip-networking

87e2be658c1f44c88b10d48d3a3d0851-MySQL.png

第二步 重载你的权限表,这样账户状态管理服务才能工作

mysql> FLUSH PRIVILEGES;

这一步结束以后,下一步就可以进行正常的密码修改了。

第三步 修改密码

`MySQL 5.7.6或之后的版本用这种`:mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
`MySQL 5.7.5或之前的版本用这种`:mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('NewPassword');

	这里解释一下:'root'就是你想修改的用户名,比如你MySQL登录名为myroot,那么这里就是'myroot'@'localhost'
				 'localhost'就是你想修改的用户名所设定的IP地址,如果你是本地的用户的话,那么基本就是'localhost',如果你是远程账户,那么就需要IP,我们拿1.1.1.1举例就是'root'@'1.1.1.1'
				 句子里的'NewPassword'就是你想设置的新密码了。
				 另外就是别忘了修改密码'(仅修改密码这一步)'这一步的末尾别忘了分号(';')

最后 关闭命令行或exit退出MySQL,重启MySQLservice

  1. 关闭命令行或使用exit退出MySQL
  2. Windows用户在服务界面重新启用MySQL service,Linux用户直接使用Service mysql start就可以了(或者你没有绑定service快捷,那么就去文件夹找到mysql去start)
  3. 就这样结束了。重新打开命令行或者MySQL客户端用新密码进行连接吧!

**最终**
官方给出了一个如果你在修改密码,使用两种方式都无法进行修改密码的情况
那么官方给你的解决方式是使用下列代码:
> UPDATE mysql.user SET authentication_string = PASSWORD('NewPassword') WHERE User = 'root' AND Host = 'localhost';
> FLUSH  PRIVILEGES;


标题:【杂谈】MySQL越权限更改密码
作者:taoism-o
地址:https://kevincheng.xin/articles/2018/03/11/1520692834259.html