Mysql 5.7.X的用户管理,密码修改,密码找回

Mysql 5.7.X的用户管理,密码修改,密码找回

题外话

作为Mysql的管理人员,在搭建好Mysql服务后的第一件事情就是创建管理用户,在5.7上的用户管理有些小的变化,一起看看吧。

一、用户管理

用户创建及授权
方法一:用GRANT命令用来建立新用户,指定用户口令并增加用户权限,语法如下:

语法:
mysql> GRANT <privileges> ON <what> TO <user> [IDENTIFIED BY "<password>"] [WITH GRANT OPTION];

如建立一tt_dl用户:
mysql> grant all privileges on *.* to 'tt_dl'@'%' IDENTIFIED BY 'tt555666' with grant option;
flush privileges;

查看用户:
mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| tah_dl        | %         | *A6E3250CB8BDC8183FCE30CD0DB526134DE86A31 |
| dump_dl       | %         | *F5F445FD430160CF284E264284DF3643C21A39A4 |
| tt_dl         | %         | *AB6CD16E4CF7D6AC186AA5F1E4250A29987B436F |
+---------------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

参数说明:

  1. privileges 是一个用逗号分隔的你想要赋予的MySQL用户权限的列表。
    指定的权限可以分为三种类型:
    数据库/数据表/数据列权限(Alter、Create、Delete…)
    全局管理MySQL用户权限(file、PROCESS、reload、shutdown)
    特别的权限(all、usage)

  2. what 是指哪些库表(对象)的权限,如上的on . 也可以是db1.test1。

  3. user 是指创建的用户,如上的to ‘tt_dl’@’%’ ,注意%的含义是匹配所有主机,如果是localhost或者127.0.0.1等表示只能本机登陆。

  4. with grant option 权限传递。如果带了 with grant option ,那么用户tt_dl可以将权限传递给其他用户。

  5. flush privileges; 刷新相关权限表。

方法二:先删掉异常的user,再创建user,再授权,语法如下:

mysql> drop user 'tt_dl'@'%'; ---- 删除用户
mysql> flush privileges;
mysql> CREATE USER 'tt_dl'@'%' IDENTIFIED BY 'tt555666';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'tt_dl'@'%' IDENTIFIED BY 'tt555666';
flush privileges;

参数同方法一,此方法用于在遇到多次创建相同用户但出现异常不能使用。

用户权限回收
revoke跟grant的语法差不多,只需要把关键字 “to” 换成 “from” 即可;

mysql> show grants for 'test'@'localhost';
+---------------------------------------------------------------------+
| Grants for test@localhost                                           |
+---------------------------------------------------------------------+
| GRANT SELECT, DELETE ON *.* TO 'test'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql> revoke delete on *.* from 'test'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> show grants for 'test'@'localhost';
+-------------------------------------------------------------+
| Grants for test@localhost                                   |
+-------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'test'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

二、密码修改

PS:注意在MySQL 5.7 password字段已从mysql.user表中删除,新的字段名是“authenticalion_string”.

查看用户:
mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| tah_dl        | %         | *A6E3250CB8BDC8183FCE30CD0DB526134DE86A31 |
| dump_dl       | %         | *F5F445FD430160CF284E264284DF3643C21A39A4 |
| tt_dl         | %         | *AB6CD16E4CF7D6AC186AA5F1E4250A29987B436F |
+---------------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

修改用户tt_dl密码:
update mysql.user set authentication_string=password('555666') where  user='tt_dl' and host='%';  --注意不要漏了host条件
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
再次查看用户:(密码已更改)
mysql> select user,host,authentication_string from mysql.user;
+---------------+-----------+-------------------------------------------+
| user          | host      | authentication_string                     |
+---------------+-----------+-------------------------------------------+
| root          | localhost |                                           |
| mysql.session | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| mysql.sys     | localhost | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE |
| tah_dl        | %         | *A6E3250CB8BDC8183FCE30CD0DB526134DE86A31 |
| dump_dl       | %         | *F5F445FD430160CF284E264284DF3643C21A39A4 |
| tt_dl         | %         | *F5F445FD430160CF284E264284DF3643C21A39A4 |
+---------------+-----------+-------------------------------------------+
6 rows in set (0.00 sec)

三、密码找回

情况一:如果是忘记了普通用户密码,但知道root或者拥有超级权限用户的密码,比较简单的做法就是和业务沟通好后,直接修改普通用户密码,修改密码方法如上文。

情况二:如果是忘记了root密码,但有别的可用超级用户,也可以直接修改root密码即可。

情况三:如果是忘记了root密码,且没有别的可用超级用户,或者是其他用户密码都忘了,这种情况比较麻烦,可参考以下步骤:(需停Mysql服务)

01:停止mysql实例,
02:用mysqld命令配合--skip-grant-tables来启动mysql实例; --skip-grant-tables表示跳过权限表;
03:用mysql命令无密码登录mysql
04:修改用户的密码;
05:停止mysql实例;
06:启动mysql实例;

PS:不停Mysql服务可尝试以下方法:
01:找到数据文件user.MYD
02:用xxd user.MYD找到mysql实例中相应用户密码的密文字符串;
在这里插入图片描述
03:得到的字符串利用网站 https://www.cmd5.com/ 进行解析;(复杂的密码有可能解析不出来)
在这里插入图片描述

哎哟,不错噢! - - - - - - 欢迎指出有误的地方以及补充更好的方法

猜你喜欢

转载自blog.csdn.net/Tah_001/article/details/107465373