-- 注意用户所有的具有权限的信息,都是存放在系统数据库mysql的user表中,我们创建的所有用户都会自动在这个表
-- mysql的user表中的第一列是Host,也就是主机,一般值为localhost,localhost表示本机的意思。其他列表示各种权限,N表示没有,Y表示有 -- 主机的作用: 当前用户只能在哪一个主机上访问当前mysql服务器。例如Host如果是localhost,那就不支持远程访问,只能本机访问
use mysql;
select * from user;
-- 创建用户,用户名为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
-- 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'@'%';
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'@'%';
-- 注意多个权限之间,使用逗号分隔 -- 注意授权时,数据库名和表名可以使用 * 进行通配,代表所有