Mysql用户授权与恢复root密码策略

一、用户授权

命令格式:

grant 权限列表 on 库名 to 用户名@'客户端地址' identified by '密码' with grant option;

with grant option : 被赋权的用户可以给其他用户赋权(在自己的权限列表下)

权限列表:

all:所有权限

usage:无权限

select,insert,update,delete  //个别权限

update,insert(字段1,字段2...) :指定字段

补充:all != select,insert,update,delete  用户的权限有很多,远不止对表进行增删改查四项

库名:

*.*:所有库表

库.*:此库中的所有表

库.表:库中的某张表

客户端地址:

%:所有主机

192.168.1.%:网段内的所有主机

192.168.1.1:一台主机

localhost:本地主机

查看权限与修改密码:

Mysql用户授权与恢复root密码策略_第1张图片

撤销权限

revoke 权限列表 on 库名.表 from 用户名@'客户端地址';

如果你想撤销授权,可以先查看一下当前用户拥有的权限

show grants;  //显示自己真身访问权限

mysql> show grants;
+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+
撤销一条权限:revoke PROXY ON ''@'' TO 'root'@'localhost' ;

 

二、恢复root密码

步骤:

1.停止mysql服务

2.修改配置文件

3.无密登录mysql

4.修改root密码

5.退出mysql并还原配置文件

6.通过修改后的密码访问

 

  1. [root@dbsvr1 ~]# systemctl stop mysqld.service         //停止服务
  2. [root@dbsvr1 ~]# vim /etc/my.cnf        //在[mysqld]下追加一条配置
  3. [mysqld]
  4. skip_grant_tables
  5. .. ..
  6. [root@dbsvr1 ~]# systemctl start mysqld.service //重启服务
  7. [root@dbsvr1 ~]# mysql //直接回车即可
  8. //修改mysql.user下的密码字段
  9. mysql> UPDATE mysql.user SET authentication_string=PASSWORD('123qqq…A')  
  10. -> WHERE user='root' AND host='localhost';
  11. //通过执行“FLUSH PRIVILEGES;”可使授权表立即生效,对于正常运行的MySQL服务,也可以用上述方法来修改密码,不用重启服务。本例中因为是恢复密码,最好重启MySQL服务程序.
  12. mysql> FLUSH PRIVILEGES;   
  13. [root@dbsvr1 ~]# vim /etc/my.cnf  //修改之后改回来,为了安全
  14. [mysqld]
  15. #skip_grant_tables=1                             //注释掉或删除此行
  16. .. ..
  17. [root@dbsvr1 ~]# systemctl restart mysqld.service
  18. [root@dbsvr1 ~]# mysql -uroot –p123qqq…A  //验证登录

 

三、重置root密码

 

修改管理员root密码的方法集合

记得密码的情形

1.方法1,以root登入mysql 后,使用SET PASSWORD指令设置

 注意,修改的密码必须符合安全策略

  1. mysql>set global validate_password_policy=0;
  2. mysql>set global validate_password_length=6;
  3. mysql> SET PASSWORD FOR root@localhost=PASSWORD('123456');
  4. //123456属于安全级别为0的安全策略

2.方法2,以root登入mysql后,使用GRANT授权工具设置

  1. mysql>set global validate_password_policy=0;
  2. mysql>set global validate_password_length=6;
  3. mysql> GRANT all ON *.* TO root@localhost IDENTIFIED BY '123456';

3.方法3,以root登入mysql后,使用UPDATE更新相应的表记录

注意:以此方法修改后的密码必须重启服务器后者输入刷新命令

  1. mysql>set global validate_password_policy=0;
  2. mysql>set global validate_password_length=6;
  3. mysql> UPDATE mysql.user SET authentication_string=PASSWORD('123456')
  4. -> WHERE user='root' AND host='localhost';         //重设root的密码
  5. mysql> FLUSH PRIVILEGES;    

4.方法4,使用mysqladmin管理工具,需要验证旧的密码

  1. [root@dbsvr1 ~]# mysqladmin -uroot -p password 'A…qqq321'   //password '新密码'                   
  2. Enter password:      //输入新密码

不记得密码的情形

1.方法1,修改mysql配置文件,跳过密码验证使用UPDATE更新相应的表记录

  1. mysql>set global validate_password_policy=0;
  2. mysql>set global validate_password_length=6;
  3. mysql> UPDATE mysql.user SET authentication_string=PASSWORD('123456')
  4. -> WHERE user='root' AND host='localhost';         //重设root的密码
  5. mysql> FLUSH PRIVILEGES;    
     

  上文恢复root密码中使用的就是这种方法,为什么不使用SET PASSWORD或者GRANT修改,因为我们修改了配置文件,使其无需密码验证就可以登录mysql,但是mysql安全机制不允许,报错信息如下

ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
 

2.方法2,修改mysql配置文件,跳过密码验证使用alter修改密码

 记得重启服务

  1. [root@dbsvr1 ~]# vim /etc/my.cnf        //在[mysqld]下追加一条配置
  2. [mysqld]
  3. skip_grant_tables
  4. .. ..
  5. [root@dbsvr1 ~]# mysql
  6. mysql>set global validate_password_policy=0;
  7. mysql>set global validate_password_length=6;
  8. mysql> alter user root@”localhost” identified by "123456"; //修改登陆密码

你可能感兴趣的:(mysql)