用户权限管理,【DCL】【mysql】

权限分级

  • 库级:day06.* 全库所有表,不能限定字段
  • 表级:day06.students 整张表全部字段
  • 字段级:select(name,score) 单表里只开放指定列,最小粒度权限

视图操作

    • create view:封装常用查询,简化访问、隐藏敏感字段
    • drop view:删除视图,不影响原始数据表

配套工具命令

  • show grants for 用户名:查看用户所有权限
  • flush privileges:刷新权限

查看权限

复制代码
show grants for 'root'@'%';

赋权

复制代码
grant 权限 on 库.表to'用户名'@'host';

给用户所有的权限,包括给别人执行grant权限

复制代码
grant all privileges on *.* to 'root'@'%' with grant option ;

with grant option

它的作用是:你创建的这个用户能不能给别人执行 grant

单表指定字段权限

只能访问这一张表、指定的几列,适合限制用户只能看部分敏感字段。

复制代码
grant select(字段1,字段2) on 库.单表 to 用户

给用户授权查询功能,单表指定权限

复制代码
#给tom权限,对testdb.emp表有查询的功能
grant select on testdb.emp  to 'tom'@'%';
show grants for 'tom'@'%';

单表所有权限

例如:testdb库所有表可查看

复制代码
grant select on testdb.* to 'jack'@'%';

例如:给用户追加插入权限,testdb.emp单库单表权限

复制代码
#给tom追加一个插入权限
grant insert on testdb.emp to 'tom'@'%';
show grants for 'tom'@'%';

列级限制(只允许查指定字段)

#只允许jack用户查看testdb库的emp表的ename和sal列的信息

复制代码
create user 'jack'@'%' identified by 'Aa123456.';
grant select(ename,sal) on testdb.emp to 'jack'@'%';
show grants for 'jack'@'%';

视图

创建视图

创建视图aaa,只显示testdb库的emp表的ename和sal列的信息

复制代码
create view aaa as select ename,sal from testdb.emp;
  • 视图aaa看起来只有 ename,sal两个字段,看不到原表其他列;
  • 数据库不会单独存一份数据,数据还是存在原始表emp里;
  • 改 / 删视图的数据,本质是修改底层原始emp 表的数据。

直接查视图 aaa,等价于执行:select ename,sal from testdb.emp;

更改试图数据

复制代码
update aaa set ename = '吕布2' where sal = 800;

删除视图数据

复制代码
delete from aaa where ename = '吕布2';

删除视图

复制代码
drop view aaa;

用户权限回收

例如:移除jack用户对testdb.emp表的ename,sal字段的查看权限(回收字段级查询权限)

复制代码
revoke select(ename,sal) on testdb.emp from 'jack'@'%';
show grants for 'jack'@'%';

例如,回收 tom 整张表的查询权限

复制代码
revoke select on testdb.tmp from 'tom'@'%';
show grants for 'tom'@'%';

例如:一次性回收 tom 在这张表的所有权限

复制代码
revoke all on testdb.tmp from 'tom'@'%';
show grants for 'tom'@'%';

用户管理

修改用户密码

复制代码
alter user 'zpq'@'192.168.88.%' identified by 'Aa123456@';

修改用户名 / 登录主机

复制代码
rename user 'zpq'@'192.168.88.%' to 'ltx'@'192.168.88.%';
flush privileges;

验证语句

复制代码
select user,host from user;

在 MySQL 命令行切换用户

复制代码
system mysql -uroot -pMySQL@666;
  • -uroot:指定登录用户 root
  • -pMySQL@666:明文附带密码MySQL@666

查询当前这条数据库连接正在使用的账号

复制代码
select user();