MySQL之DCL(Data Control Language)

Posted 李子捌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL之DCL(Data Control Language)相关的知识,希望对你有一定的参考价值。

  •  备战2022春招或暑期实习,本专栏会持续输出mysql系列文章,祝大家每天进步亿点点!文末私信作者,我们一起去大厂
  • 本篇总结的是 《DCL(Data Control Language)》,后续会每日更新~
  • 关于《Redis入门到精通》、《并发编程》、《Java全面入门》、《鸿蒙开发》等知识点可以参考我的往期博客
  • 相信自己,越活越坚强,活着就该逢山开路,遇水架桥!生活,你给我压力,我还你奇迹!

目录

一、简介

二、用户管理

三、权限管理


一、简介

DCL(Data Control Language)指的是数据库控制语言,用于管理数据库用户、控制数据库的访问权限。

二、用户管理

2.1 查询用户

首先查询系统用户,在MySQL数据库中,用户存储在mysql数据库的user表中(mysql.user),因此可以使用有权限的用户(通常是root账户)来查询user表;通常有两种方式:

use mysql;
select * from user;
select * from mysql.user;

查询的结果如下所示:

在查询的结果中第一列Host代表可以访问的主机,第二列User代表访问数据库的用户名。MySQL中通过Host和User来标记一个用户,因此通常用户的表现形式为'user'@'host' 也就是'用户名'@'主机名'。后续列均表示当前用户所拥有的权限项,N代表无权限,Y代表有权限。

2.2 创建用户

创建用户的语法如下:

create user '用户名'@'主机名' identified by '密码';

案例1:创建一个用户名为liziba,密码为123456,且只允许本机访问的MySQL用户。

create user 'liziba'@'localhost' identified by '123456';

重新查询用户 select * from mysql.user,发现此时user表中新增了一条记录,值得注意的是,此时liziba这个用户,权限项的值都是N,表示当前用户并没有任何权限,这里就是后面会讲的用户授权。

 

案例2:创建一个用户名为liziqi,密码为123456,且允许任意主机访问的MySQL用户。

create user 'liziqi'@'%' identified by '123456';

在MySQL中,%通配符代表任意,如果当前用户需要通过任意主机访问MySQL,则可以使用%通配符,此时可以再次查询用户表,User为liziqi的用户,访问Host为%。

2.3 修改用户

通常情况下,修改用户用的最多的就是重置密码,虽然这类事情基本上是DBA/公司运维来负责,但我们自己也是需要了解的。
案例1:修改用户liziqi的密码为1234567

alter user 'liziqi'@'%' identified with mysql_native_password by '1234567';

语句中的mysql_native_password代表加密方式,我的MySQL版本为8.0.15,其默认的加密方式为caching_sha2_password,可以通过select version()查询版本号,通过select user,host,plugin from mysql.user;查看当前用户的登录校验的加密方式,如果客户端不支持caching_sha2_password加密的话,就可以通过上面的语句修改加密方式。

如下liziqi\\liziba\\root 是我修改过plugin之后的结果,mysql.infoschema\\mysql.session\\mysql.sys默认plugin为caching_sha2_password

2.4 删除用户

案例1:删除用户liziqi

drop user 'liziqi'@'%';

三、权限管理

MySQL中定义了很多权限,用户在不授权的情况下,无法操作MySQL数据库中的数据。在mysql.user的DDL中可以看到非常多的权限:

-- auto-generated definition
create table user
(
    Host                     char(60)                                           default ''                      not null,
    User                     char(32)                                           default ''                      not null,
    Select_priv              enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Insert_priv              enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Update_priv              enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Delete_priv              enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Create_priv              enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Drop_priv                enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Reload_priv              enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Shutdown_priv            enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Process_priv             enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    File_priv                enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Grant_priv               enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    References_priv          enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Index_priv               enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Alter_priv               enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Show_db_priv             enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Super_priv               enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Create_tmp_table_priv    enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Lock_tables_priv         enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Execute_priv             enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Repl_slave_priv          enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Repl_client_priv         enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Create_view_priv         enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Show_view_priv           enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Create_routine_priv      enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Alter_routine_priv       enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Create_user_priv         enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Event_priv               enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Trigger_priv             enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Create_tablespace_priv   enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    ssl_type                 enum ('', 'ANY', 'X509', 'SPECIFIED') charset utf8 default ''                      not null,
    ssl_cipher               blob                                                                               not null,
    x509_issuer              blob                                                                               not null,
    x509_subject             blob                                                                               not null,
    max_questions            int(11) unsigned                                   default 0                       not null,
    max_updates              int(11) unsigned                                   default 0                       not null,
    max_connections          int(11) unsigned                                   default 0                       not null,
    max_user_connections     int(11) unsigned                                   default 0                       not null,
    plugin                   char(64)                                           default 'caching_sha2_password' not null,
    authentication_string    text                                                                               null,
    password_expired         enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    password_last_changed    timestamp                                                                          null,
    password_lifetime        smallint unsigned                                                                  null,
    account_locked           enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Create_role_priv         enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Drop_role_priv           enum ('N', 'Y') charset utf8                       default 'N'                     not null,
    Password_reuse_history   smallint unsigned                                                                  null,
    Password_reuse_time      smallint unsigned                                                                  null,
    Password_require_current enum ('N', 'Y') charset utf8                                                       null,
    User_attributes          json                                                                               null,
    primary key (Host, User)
)
    comment 'Users and global privileges' collate = utf8_bin;

grant select on table user to 'mysql.session'@localhost;

对我们来说比较重要的几个是select、insert、update、delete、alter、drop、create、all/all privileges

3.1 查询权限

查询指定用户权限语法如下:

show grants for '用户名'@'主机名'

案例1:查询root用户的权限

show grants for 'root'@'localhost'

3.2 授予权限

授予指定用户指定权限语法如下:

grant 权限列表 on 数据库名.表名 to '用户名'@'表名'

案例1:授权liziba用户所有数据库所有表的查询权限
第一步先查询liziba用户的权限

show grants for 'liziba'@'localhost';

可以发现liziba用户有一个usage权限,注意这个权限是MySQL在创建用户时给每个用户分配的最低权限,这个权限几乎干不了啥事情,并且无法被回收,只能连接到数据库和查询information_schema。

这个可以通过cmd直接使用liziba用户连接到MySQL就可以验证

紧接着给liziba用户授权

grant select on *.* to 'liziba'@'localhost';

此时发现liziba用户拥有了每个数据库的select权限,.代表任意数据库的任意表。

授权之后,再次执行select语句查询,发现liziba用户拥有了select权限:

赋予某个用户全部权限可以使用如下语句:

grant all on *.* to '用户名'@'主机名'

3.3 撤销权限

撤销指定用户指定权限语法如下:

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

案例1:撤销liziba用户的全部权限

revoke all on *.* from 'liziba'@'localhost';

以上是关于MySQL之DCL(Data Control Language)的主要内容,如果未能解决你的问题,请参考以下文章

MySQL之DCL(Data Control Language)

MySQL之DCL(Data Control Language)

Data Control Language(DCL):数据控制语言

SQL Fundamentals || DCL(Data Control Language) || 角色ROLES

SQL Fundamentals || DCL(Data Control Language) || 用户管理&Profile概要文件

Mysql DCL (Date Control Language)