mysql8.0必须是先创建用户再授权
生产复杂强口令
openssl rand -base64 40 | cut -c 1-12
rDjTpagOjmVE
方法一:先创建账号并设置密码
mysql> create user tom@'%' identified by 'XMKx6da2etPXBD9.';
在进行授权
想在远程登录 就把@后面换成%号
mysql>grant all privileges on qf.* to 'tom'@'%';
mysql> flush privileges; #更新授权表
在进行测试(此时已经可以登录成功)
mysql -utom -p'XMKx6da2etPXBD9.'
如果是这样授权 此时的密码会被更改成123456
mysql>grant all privileges on qf.* to 'tom'@'localhost' identified by '123456';
with grant option;这个参数带上以后 tom就可以给别人授权了
mysql>grant all privileges on qf.* to 'tom'@'%' with grant option;
注:
identified by :设置密码
在用户tom@' ' 这里 选择:
%:允许所有主机远程登陆包括localhost。也可以指定某个ip,允许某个ip登陆。也可以是一个网段。
localhost:只允许本地用户登录
==客户端主机 % 所有主机远程登录
192.168.246.% 192.168.246.0网段的所有主机
192.168.246.252 指定主机
localhost 只允许本地用户登录
备注:
1.无用户时可以创建用户并指定口令
2.口令有密码复杂性要求
3.%表示任意主机
口令复杂性要求出错提示:
需要执行两个参数来把mysql默认的密码强度的取消
mysql>set global validate_password_policy=0;
mysql>set global validate_password_mixed_case_count=2;
授权root进行远程登录
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
方式二:使用命令创建用户并授权:grant
也可创建新账户(不过后面的版本会移除这个功能,建议使用create user)
语法格式:
grant 权限列表 on 库名.表名 to '用户名'@'客户端主机' IDENTIFIED BY 'Qf@123';
==权限列表 all 所有权限(不包括授权权限)
select,update
select, insert
#注意:root用授权时候grant授权权限不要给予
==数据库.表名 *.* 所有库下的所有表
web.* web库下的所有表
web.stu_info web库下的stu_info表
#单独授权
给刚才创建的用户tom授权:
mysql> grant select,insert on *.* to 'tom'@'localhost';
#更新授权表
mysql> flush privileges;
查看权限
1.看自己的权限:
mysql> show grants;
*************************** 1. row ***************************
Grants for root@%: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION
2.看别人的权限:
mysql> show grants for tom@'localhost';
*************************** 1. row ***************************
Grants for tom@localhost: GRANT SELECT, INSERT ON *.* TO 'tom'@'localhost'
移除权限
移除用户权限
语法:REVOKE 权限 ON 数据库.数据表 FROM '用户'@'IP地址';
- 被回收的权限必须存在,否则会出错
- 整个数据库,使用 ON datebase.*;
- 特定的表:使用 ON datebase.table;
给tom用户授权
grant all privileges on *.* to 'tom'@'%';
grant select,insert on *.* to 'tom'@'%';
flush privileges;
移除用户tom权限
revoke all privileges on *.* from tom@'%';
flush privileges;
移除用户tom插入和选择权限
revoke insert,select on *.* from tom@'%';
flush privileges;
查看用户tom权限
show grants for tom@'%';
mysql> revoke select,delete on *.* from jack@'%'; #回收指定权限
mysql> revoke all privileges on *.* from jack@'%'; #回收所有权限
mysql> flush privileges;