
/*
注意用户所有的具有权限的信息，都是存放在系统数据库mysql的user表中，我们创建的所有用户都会自动在这个表

mysql的user表中的第一列是Host，也就是主机，一般值为localhost，localhost表示本机的意思。其他列表示各种权限，N表示没有，Y表示有
主机的作用: 当前用户只能在哪一个主机上访问当前mysql服务器。例如Host如果是localhost，那就不支持远程访问，只能本机访问
*/

use mysql;
select * from user;

-- -------------------------------> DCL-管理用户 <----------------------------------------------

-- 创建用户，用户名为itcast，设置该用户只能在主机localhost访问，密码123456
create user 'itcast'@'localhost' identified by '123456';

-- 创建用户，用户名为heima，设置该用户可以在任意主机访问该数据库，密码123456
create user 'heima'@'%' identified by '123456';

-- 修改用户heima的访问密码为123
alter user 'heima'@'%' identified with mysql_native_password by '123';

-- 删除itcast用户和heima用户
drop user 'itcast'@'localhost';
drop user 'heima'@'%';

#【如何验证我们创建的用户是否成功】
# 按住电脑键盘的win+R，输入:mysql -u itcast -p。然后输入密码123456。输入show databases
# 验证任意主机: 去找另一台电脑，输入:mysql -h 你原本电脑ip -P 3306 -u itcast -p。然后输入密码123456

#【为什么登录到其他用户只能看到一两个数据库】
# 原因:我们平时登录一般都是root用户，有最高权限，可以查看所有root用户的所有已存在的数据库
# 其他用户没有查看其他数据库的权限，只有一两个数据库可以show databases查看到
# 我们在创建一个用户后，往往会给这个用户分配相关权限，我们下面会讲到权限控制

#【注意事项】
# 1. 主机名可以使用 % 通配符
# 2. 需要使用这节课知识的这类SQL开发人员较少，主要是DBA(数据库管理员)使用
# 3. 退出当前用户:exit


-- -------------------------------> DCL-权限控制 <----------------------------------------------

/*

MySQL中定义了很多种权限，但是常用的就以下几种

权限                            描述
all,all privileges             所有权限
select                         查询数据的权限
insert                         插入数据的权限
update                         修改数据的权限
delete                         删除数据的权限
alter                          修改表的权限
drop                           删除数据库/表/视图的权限
create                         创建数据库/表的权限


我们以查询权限为例，演示一下如何操作，如下

查询权限
show grants for '用户名'@'主机名';

授予权限。如果是给所有数据库的所有表赋予权限就可以使用*.*
grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';

撤销权限
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机名';
*/

-- 创建数据库，数据库名为itcast
create database if not exists itcast;

-- 创建用户，用户名为heima，设置该用户可以在任意主机访问该数据库，密码123456
create user 'heima'@'%' identified by '123456';

-- 查询权限。GRANT USAGE ON *.* TO `heima`@`%` : 表示没有任何权限
show grants for 'heima'@'%';

-- 授予权限。all表示所有权限。*表示所有，下面的是itcast数据库的所有表。
grant all on itcast.* to 'heima'@'%';

-- 最直观的看heima用户有没有拿到在itcast数据库的权限的方式就是如下
# win+R，cmd，输入:mysql -h 169.254.152.247 -P 3306 -u heima -p。然后输入密码123456
# 输入: show databases; 查看heima用户能访问哪些数据库，发现不能输出itcast，即还不能访问itcast数据库
# 执行上面的授予权限的代码
# 输入: show databases; 查看heima用户能访问哪些数据库，发现可以输出itcast，即能访问itcast数据库
# 输入: use itcast;
# 输入: show tables; 查看itcast数据库的所有表
# 在授予权限之前heima用户不能访问itcast数据库，授予权限之后你就可以访问啦

-- 撤销权限。all表示所有权限。撤销heima用户在itcast数据库的所有权限
revoke all on itcast.* from 'heima'@'%';

/*
注意多个权限之间，使用逗号分隔
注意授权时，数据库名和表名可以使用 * 进行通配，代表所有
*/


