一、用户授权
命令格式:
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:本地主机
查看权限与修改密码:
撤销权限
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.通过修改后的密码访问
- [root@dbsvr1 ~]# systemctl stop mysqld.service //停止服务
- [root@dbsvr1 ~]# vim /etc/my.cnf //在[mysqld]下追加一条配置
- [mysqld]
- skip_grant_tables
- .. ..
- [root@dbsvr1 ~]# systemctl start mysqld.service //重启服务
- [root@dbsvr1 ~]# mysql //直接回车即可
- //修改mysql.user下的密码字段
- mysql> UPDATE mysql.user SET authentication_string=PASSWORD('123qqq…A')
- -> WHERE user='root' AND host='localhost';
- //通过执行“FLUSH PRIVILEGES;”可使授权表立即生效,对于正常运行的MySQL服务,也可以用上述方法来修改密码,不用重启服务。本例中因为是恢复密码,最好重启MySQL服务程序.
- mysql> FLUSH PRIVILEGES;
- [root@dbsvr1 ~]# vim /etc/my.cnf //修改之后改回来,为了安全
- [mysqld]
- #skip_grant_tables=1 //注释掉或删除此行
- .. ..
- [root@dbsvr1 ~]# systemctl restart mysqld.service
- [root@dbsvr1 ~]# mysql -uroot –p123qqq…A //验证登录
三、重置root密码
修改管理员root密码的方法集合
记得密码的情形
1.方法1,以root登入mysql 后,使用SET PASSWORD指令设置
注意,修改的密码必须符合安全策略
- mysql>set global validate_password_policy=0;
- mysql>set global validate_password_length=6;
- mysql> SET PASSWORD FOR root@localhost=PASSWORD('123456');
- //123456属于安全级别为0的安全策略
2.方法2,以root登入mysql后,使用GRANT授权工具设置
- mysql>set global validate_password_policy=0;
- mysql>set global validate_password_length=6;
- mysql> GRANT all ON *.* TO root@localhost IDENTIFIED BY '123456';
3.方法3,以root登入mysql后,使用UPDATE更新相应的表记录
注意:以此方法修改后的密码必须重启服务器后者输入刷新命令
- mysql>set global validate_password_policy=0;
- mysql>set global validate_password_length=6;
- mysql> UPDATE mysql.user SET authentication_string=PASSWORD('123456')
- -> WHERE user='root' AND host='localhost'; //重设root的密码
- mysql> FLUSH PRIVILEGES;
4.方法4,使用mysqladmin管理工具,需要验证旧的密码
- [root@dbsvr1 ~]# mysqladmin -uroot -p password 'A…qqq321' //password '新密码'
- Enter password: //输入新密码
不记得密码的情形
1.方法1,修改mysql配置文件,跳过密码验证,使用UPDATE更新相应的表记录
- mysql>set global validate_password_policy=0;
- mysql>set global validate_password_length=6;
- mysql> UPDATE mysql.user SET authentication_string=PASSWORD('123456')
- -> WHERE user='root' AND host='localhost'; //重设root的密码
- 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修改密码
记得重启服务
- [root@dbsvr1 ~]# vim /etc/my.cnf //在[mysqld]下追加一条配置
- [mysqld]
- skip_grant_tables
- .. ..
- [root@dbsvr1 ~]# mysql
- mysql>set global validate_password_policy=0;
- mysql>set global validate_password_length=6;
- mysql> alter user root@”localhost” identified by "123456"; //修改登陆密码