1.4 数据库初识 DCL

149 阅读3分钟

DCL-介绍

DCL 英文全称是 Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访问权限。

管理用户

  • 查询用户表
    USE mysql;
    SELECT * FROM user;
    
  • 创建用户
    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
    
  • 修改用户密码
    ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '密码';
    
  • 删除用户
    DROP USER '用户名'@'主机名';
    
  • 注意 :
    • 主机名可使用%通配,任意主机,localhost代表仅MySQL服务主机可访问.
    • 以上用户相关的操作,对于开发人员来讲操作的比较少,主要是DBA(Database Administrator 数据库管理员) 使用.

权限控制

  • 权限说明

    MySQL中定义了很多种权限,以下几种是比较常用的

    权限说明
    ALL , ALL PRIVILEGES所有权限
    SELECT查询数据
    INSTER插入数据
    UPDATE修改数据
    DELETE删除数据
    ALTER修改表
    DROP删除数据库/表/视图
    CREATE创建数据库/表

    其他权限描述以及含义,可以参考官方文档8.0

  • 查询权限

SHOW GRANTS FOR '用户名'@'主机名';
  • 授予权限 GRANT
GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';
  • 撤销权限 REVOKE
REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';
  • 注意
    • 在赋予权限时*代表通配符,可用在数据库名or表名上.代表所有
    • 多个权限之间使用逗号分割.


练习

管理用户

题1
  • 问 : 创建用户tempuser,只能在当前主机localhost访问,密码123456
CREATE USER 'tempuser'@'localhost' IDENTIFIED BY '123456';
-- 查看MySql用户表
SELECT * FROM user;

题2
  • 问 : 创建用户admin,可以在任意主机访问数据库,密码123456
CREATE USER 'admin'@'%' IDENTIFIED BY '123456';
-- 查看MySql用户表
SELECT * FROM user;

题3
  • 问 : 修改admin的访问密码为1234
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '1234';

题4
  • 问 : 删除admin@%用户.
DROP USER 'admin@%';
-- 查看MySql用户表
SELECT * FROM user;

权限控制

题1
  • 问 : 查询用户tempuser@localhost的权限
-- 查询用户`tempuser`权限
SHOW GRANTS FOR 'tempuser'@'localhost';

题2
  • 问 : 给用户tempuser@localhost授予查询插入权限,仅限于database-exercises和database下面的表emp.
GRANT SELECT,INSTER ON exercises.emp TO 'tempuser'@'localhost';
-- 查询用户`tempuser`权限
SHOW GRANTS FOR 'tempuser'@'localhost';

题3
  • 问 : 给用户tempuser@localhost授予全部权限(包含增删改查等...),全部database,以及全部database下的全部表.
GRANT ALL ON *.* TO 'tempuser'@'localhost';
-- 查询用户`tempuser`权限
SHOW GRANTS FOR 'tempuser'@'localhost';

题4
  • 问 : 给用户tempuser@localhost取消全部权限,并删除用户.
REVOKE ALL ON *.* FROM 'tempuser'@'localhost';
-- 查询用户`tempuser`权限
SHOW GRANTS FOR 'tempuser'@'localhost';
-- 删除用户'tempuser'@'localhost'
DROP USER 'tempuser'@'localhost';
-- 查看MySql用户表
SELECT * FROM user;