用户管理和授权是属于MySQL当中的DCL语句
创建用户以及一些相关操作
明文创建用户
create user 'zzr'@'localhost' IDENTIFIED by '123456';
create user  这是创建用户的开头
zzr表示用户名
localhost:新建的用户可以在哪些主机上登录。即可以使用IP地址,网段,主机名都可以
IDENTIFIED by '123456';  新建用户的密码 
我们可以通过IP地址,网段,主机名进行创建,这些都是对'location'的操作
'zzr'@'localhost'
'zzr'@'192.168.233.0/24'
'zzr'@'192.168.233.22'
'zzr'@'%'
 
其中 %代表正则任意
加密密码创建用户 :
 SELECT PASSWORD('密码');    #先获取加密的密码
 
 CREATE USER 'lisi'@'localhost' IDENTIFIED BY PASSWORD '加密的密码'; 
登录用户用户名的更改
 RENAME USER '旧的用户名'@'旧的主机地址' TO '新的用户名'@'新的主机地址';
rename user 'test1'@'20.0.0.100' to 'zzr'@'20.0.0.100'; 
重命名之后,原本的test1不会保留,新的直接覆盖
删除用户
drop user '用户名'@'登录地址';
drop user 'zzr'@'localhost'; 
 
修改用户密码
set password = password('abc123');
给其他用户设置密码:
set password for 'zzr'@'20.0.0.100' = password('123123'); 
注意:终端没有修改密码的权限,所以得去命令行进行修改密码操作
root用户是超级管理员,它不仅可以修改自身密码,还能修改其他用户的密码。
root密码的忘记后的修改找回方法
该操作必须是在数据库本机且为root用户,才可进行
vim  /etc/my.cnf
 
skip-grant-tables 

然后重启数据库即可
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld 
 
 
用户的相关权限
| 权限 | 权限说明 | 权限级别 | 
| CREATE | 创建数据库、表或索引的权限 | 数据库、表或索引 | 
| DROP | 删除数据库或表的权限 | 数据库或表 | 
| GRANT OPTION | 赋予权限选项 | 数据库或表 | 
| REFERENCES | 引用权限 | 数据库或表 | 
| ALTER | 更改表的权限 | 数据表 | 
| DELETE | 删除表数据的权限 | 数据表 | 
| INDEX | 操作索引的权限 | 数据表 | 
| INSERT | 添加表数据的权限 | 数据表 | 
| UPDATE | 更新表数据的权限 | 数据表 | 
| CREATE VIEW | 创建视图的权限 | 视图 | 
| SHOW VIEW | 查看视图的权限 | 视图 | 
| ALTER ROUTINE | 更改存储过程的权限 | 存储过程 | 
如何给用户赋权
grant all privileges on *.* to 'hj'@'localhost' IDENTIFIED by '123456';
grant 赋权的开头语句
all PRIVILEGES 赋予所有权限
on *.* 所有库
on *.* 所有库都有操作权限
on hj.*  只能对指定(hj)库进行操作
to 'hj'@'localhost' 赋权给哪个用户,要和创建用户赋权格式一致。
IDENTIFIED by '123456' 使用哪个密码进行登录。创建用户时候可以省略
show grants for 'hj'@'localhost';
查看权限
flush privileges;    权限刷新 
 
如何查看指定用户权限
show grant for '用户名'@'来源地址';
show grant for 'hj'@'20.0.0.100'; 

如何对权限进行控制
给用户加上权限:
grant select on 库名.* to '用户名'@'来源地址' idevtified by '密码';
grant select on test.* to 'test1'@'20.0.0.100' idevtified by '123456';
flush privileges;
 
如何给一个用户赋予多个权限
grant select,insert,drop on hj.* to  'test1'@'20.0.0.100'  identified by '123456'; 

如何给用户撤销权限
revoke select on hj.* from 'test1'@'20.0.0.100'; 

练习
1.创建用户,声明网段 test 网段任选

create user 'test'@'20.0.0.0/24' IDENTIFIED by '123123' 
2.创建一个库,库名:test1
3.库中创建两个表分别叫做
table1
id 主键
name 不为空
sex 不为空
CREATE TABLE table1 (
id int(4) PRIMARY KEY,
name_id int(4) NOT NULL,
sex int(4) not null
) 
table2
id 主键
address 可以为空 默认-----地址不详
phone 可以为空,不能重复
CREATE TABLE table2 (
id int(4) PRIMARY KEY,
address varchar(50) default '地址不详',
phone varchar(12) UNIQUE
) 
3.test可以对test1 的库 进行select insert
GRANT SELECT,INSERT on test1.* to 'test'@'20.0.0.0/24' IDENTIFIED by '123123';
//终端没有权限,所以得去root的命令行执行 

4.把test的用户名改成test_123,密码改成abc123
set passwd for 'test'@'20.0.0.%' = password('abc123');
%为正则任意,来代表网段 

5.删除权限:insert删去

总结
1.用户管理操作
create user 'username'@'address' identified by 'password'; #创建用户 
select user,host,authentication_string from mysql.user; #查看用户信息 
rename user old_user to new_user; #修改用户名 
drop user '用户名'@'来源地址'; #删除用户 
set password = password('XXXX'); #修改当前登录用户的密码 
set password for '用户名'@'来源地址' = password('XXXX'); #修改其他用户的密码 
select user (); #查看当前登录用户和来源地址 
忘记root用户密码的解决方法:
修改mysql配置文件/etc/my.cnf,在 [mysqld] 配置项下加入 skip-grant-tables
service mysqld restart #重启服务
update mysql.user set authentication_string=password('新密码') where user='root';
#修改密码 flush privileges; #刷新数据库
2.用户授权操作
grant 权限列表/ALL ON 库名.表名 to 'username'@'address' identified by '密码';  #授予用户权限 show grants; #查看当前用户(自己)的权限
show grants for 'username'@'address'; #查看其他用户的权限 
revoke 权限列表/ALL on 库名.表名 from 'username'@'address'; #撤销用户的权限 
。
  



















