mysql系列之数据控制语言(DCL)

miloyang
0 评论
/ /
564 阅读
/
5277 字
18 2023-09

MySql

分类 全称 说明
DDL Data Definition Language 数据定义语言,用来定义数据库对象,如:数据库、表、字段等等
DML Data Manipulation Language 数据操作语言,用来对数据表中的数据进行增、删、改
DQL Data Query Language 数据查询语言,用来查询 数据库中表的记录
DCL Data Control Language 数据控制语言,用来创建数据库用户、控制数据库的访问权限

DCL,用来管理数据库用户、控制数据库的访问权限相关。

用户管理

  • 查询用户

    show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | elk_blog           |
    | milo_blog          |
    | mysql              |
    | performance_schema |
    | study              |
    | sys                |
    +--------------------+
    7 rows in set (0.00 sec)
    
    mysql> use mysql # 默认的mysql数据库下,有user表,就包含了当前数据库下的用户信息
    Database changed
    mysql> select Host, User from user;
    +-----------+---------------+
    | Host      | User          |
    +-----------+---------------+
    | localhost | mysql.session |
    | localhost | mysql.sys     |
    | localhost | root          |
    +-----------+---------------+
    3 rows in set (0.00 sec)
    
  • 创建用户

    CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';

    -- 创建用户 milo ,只能在当前主机localhost访问,密码为123456
    
     -- 该用户只是创建了,但是还没有任何数据库访问权限,且只能在本机访问。
     -- 如在服务器上创建的用户,在开发机上不能直接访问。
    mysql> create user 'milo'@'localhost' identified by '123456'; 
    Query OK, 0 rows affected (0.01 sec)
    
    
    -- 创建用户 xiaobo,可以在任意注意下访问该数据库,密码为 123456
    mysql> create user 'xiaobo'@'%' identified by '123456'; 
    Query OK, 0 rows affected (0.01 sec)
    
  • 修改用户密码

    ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码';

    -- 修改milo的访问密码为 1234 
    
    -- 注意,刚刚milo给的是主机的访问权限,所以只能是localhost不能是%域
    mysql> alter user 'milo'@'localhost' identified with mysql_native_password by '1234';
    Query OK, 0 rows affected (0.00 sec)
    
    -- 恰比 xiaobo给的是任意权限,修改的时候不能是 localhost 域
    mysql> alter user 'xiaobo'@'localhost' identified with mysql_native_password by '1234';
    ERROR 1396 (HY000): Operation ALTER USER failed for 'xiaobo'@'localhost'
    
  • 删除用户

    DROP USER '用户名'@'主机名';

    -- 同比,给的什么访问权限,删除的时候也需要匹配
    DROP USER 'xiaobo'@'localhost';
    

权限控制

常用权限:

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

更多权限请看权限一览表

  • 查询权限

    SHOW GRANTS FOR '用户名'@'主机名';

    mysql> show grants for 'milo'@'localhost';
    +------------------------------------------+
    | Grants for milo@localhost                |
    +------------------------------------------+
    | GRANT USAGE ON *.* TO 'milo'@'localhost' |
    +------------------------------------------+
    1 row in set (0.00 sec)
    
  • 授予权限

    GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名';

    mysql> grant all privileges on study.* to milo@localhost;
    Query OK, 0 rows affected (0.00 sec)
    mysql> show grants for 'milo'@'localhost';
    +---------------------------------------------------------+
    | Grants for milo@localhost                               |
    +---------------------------------------------------------+
    | GRANT USAGE ON *.* TO 'milo'@'localhost'                |
    | GRANT ALL PRIVILEGES ON `study`.* TO 'milo'@'localhost' |
    +---------------------------------------------------------+
    

    此时,milo用户就拥有了study的所有权限。

  • 撤销权限

    REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';

    mysql> revoke ALL ON study.* FROM 'milo'@'localhost';
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show grants for 'milo'@'localhost';
    +------------------------------------------+
    | Grants for milo@localhost                |
    +------------------------------------------+
    | GRANT USAGE ON *.* TO 'milo'@'localhost' |
    +------------------------------------------+
    1 row in set (0.00 sec)
    

注意事项

  • 多个权限用逗号分隔
  • 授权时,数据库名和表名可以用 * 进行通配,代表所有
人未眠
工作数十年
脚步未曾歇,学习未曾停
乍回首
路程虽丰富,知识未记录
   借此博客,与之共进步