MySQL DCL数据控制语言的完整教程

 更新时间:2026年07月15日 08:56:05   作者:醉城夜风~  
想搞懂MySQL DCL数据控制语言吗,本文手把手教你创建用户、分配权限和回收权限,涵盖GRANT、REVOKE等核心命令,还有生产环境权限最小化最佳实践,帮你避免删库和数据泄露风险,数据库安全从DCL开始,需要的朋友可以参考下

一、SQL 语言分为四大类:

  1. DDL(数据定义):库、表结构操作 CREATE/DROP/ALTER
  2. DML(数据操纵):表里增删改查 INSERT/DELETE/UPDATE/SELECT
  3. DQL(数据查询):SELECT 查询语句
  4. DCL(Data Control Language 数据控制语言) 专门用来管理数据库用户、分配回收访问权限,核心指令:CREATE USERDROP USERGRANTREVOKESET PASSWORDFLUSH PRIVILEGES

日常开发、运维、数据库安全隔离都离不开 DCL:不同业务账号分配最小权限,避免删库、泄露数据风险。

二、24. DCL 用户管理(创建 / 修改 / 删除 / 查看用户)

MySQL 用户完整格式:用户名@访问主机

  • root@localhost:仅本机登录
  • user@%:任意 IP 远程登录
  • user@192.168.1.%:指定网段访问

1. 查看所有用户

用户信息存储在系统库 mysqluser

USE mysql;
SELECT user, host FROM user;

2. 创建新用户

语法:

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

示例:

-- 仅本地登录
CREATE USER 'dev'@'localhost' IDENTIFIED BY 'Dev@123456';
-- 任意远程地址登录
CREATE USER 'test'@'%' IDENTIFIED BY 'Test@654321';

3. 修改用户密码

方式 1:SET PASSWORD(推荐)

SET PASSWORD FOR 'dev'@'localhost' = PASSWORD('NewDev@789');

方式 2:ALTER USER(MySQL5.7+/8.0 + 标准)

ALTER USER 'dev'@'localhost' IDENTIFIED BY 'NewPass123';

4. 修改用户允许访问的主机

UPDATE mysql.user SET host = '%' WHERE user = 'dev';
FLUSH PRIVILEGES; -- 刷新权限生效

5. 删除用户

DROP USER IF EXISTS 'test'@'%';

三、25. DCL 权限控制(授予 / 回收 / 查看权限)

1. 常用数据库权限

权限名

作用

SELECT

查询表数据

INSERT

插入数据

UPDATE

更新数据

DELETE

删除数据

CREATE

创建库 / 表

DROP

删除库 / 表

ALTER

修改表结构

ALL PRIVILEGES

全部权限(除 GRANT 授权权限)

2. GRANT 授予权限

语法:

DROP USER IF EXISTS 'test'@'%';

场景 1:给 dev 用户分配 test_db 下所有表查询、新增权限

GRANT SELECT,INSERT ON test_db.* TO 'dev'@'localhost';

场景 2:分配全库所有权限(运维账号慎用)

GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%';

授权后刷新生效

FLUSH PRIVILEGES;

3. 查看用户已有权限

SHOW GRANTS FOR 'dev'@'localhost';

4. REVOKE 回收权限

回收已分配的指定权限:

REVOKE INSERT ON test_db.* FROM 'dev'@'localhost'; FLUSH PRIVILEGES;

回收全部权限:

REVOKE ALL PRIVILEGES ON *.* FROM 'admin'@'%';

权限最小化原则

生产环境禁止给业务账号 ALL PRIVILEGES,只分配业务必需的 SELECT/INSERT/UPDATE,不授予 DROP/ALTER 高危权限,防止误操作破坏数据。

四、26. DCL 完整知识点小结

1. DCL 核心作用

管控数据库登录账号与访问权限,保障数据库数据安全,实现多账号权限隔离。

2. 用户管理核心命令

  1. 查询用户:SELECT user,host FROM mysql.user
  2. 创建用户:CREATE USER 用户名@主机 IDENTIFIED BY 密码
  3. 修改密码:ALTER USER / SET PASSWORD
  4. 删除用户:DROP USER

3. 权限控制核心命令

  1. 授权:GRANT 权限 ON 库.表 TO 用户
  2. 回收权限:REVOKE 权限 ON 库.表 FROM 用户
  3. 查看权限:SHOW GRANTS FOR 用户
  4. 刷新权限:FLUSH PRIVILEGES(修改用户 / 权限后必须执行)

4. 生产最佳实践

  1. 区分账号:管理员 root、运维账号、业务读写账号,各司其职;
  2. 限制访问主机:业务账号限定应用服务器 IP,禁止 % 全开放远程;
  3. 最小权限分配:不给业务账号删表、删库、修改结构权限;
  4. 定期清理闲置用户,定期轮换账号密码。

5. 易踩坑点

  1. 创建用户、授权时用户名 + 主机必须完全匹配,否则不生效;
  2. 修改用户表、权限表后忘记执行 FLUSH PRIVILEGES,变更不生效;
  3. 弱密码账号直接对外开放远程访问,存在数据库泄露风险;
  4. 开发环境随意使用 ALL PRIVILEGES,直接复制到生产环境。

结尾

DCL 是数据库安全的基础,不管后端开发还是运维都必须熟练掌握。合理划分用户、精细控制权限,能极大降低删库、数据泄露等线上事故概率。下一章我们可以结合真实业务场景,演示一套完整的生产账号权限分配脚本。

以上就是MySQL DCL数据控制语言的完整教程的详细内容,更多关于MySQL DCL数据控制语言的资料请关注脚本之家其它相关文章!

相关文章

  • window10下mysql 8.0.20 安装配置方法图文教程

    window10下mysql 8.0.20 安装配置方法图文教程

    这篇文章主要为大家详细介绍了window10下mysql 8.0.20 安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • MySql中JOIN的用法示例详解

    MySql中JOIN的用法示例详解

    join顾名思义就是连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接,今天通过本文给大家介绍MySql中JOIN的用法详解,感兴趣的朋友一起看看吧
    2022-03-03
  • MySQL数据库之数据表操作

    MySQL数据库之数据表操作

    这篇文章主要介绍了MySQL数据库之数据表操作,文章基于MySQL数据库的相关资料展开详细的数据表操作的详情,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 详解Mysql自动备份与恢复的几种方法(图文教程)

    详解Mysql自动备份与恢复的几种方法(图文教程)

    本篇文章主要介绍了Mysql 自动备份与恢复,主要有三种方法,有需要的可以了解一下。
    2016-11-11
  • SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍

    SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍

    Insert是T-sql中常用语句,Insert INTO table(field1,field2,...) values(value1,value2,...)这种形式的在应用程序开发中必不可少
    2012-11-11
  • Mysql数据库中的子查询、标量子查询、行子查询、列子查询及表子查询实例代码

    Mysql数据库中的子查询、标量子查询、行子查询、列子查询及表子查询实例代码

    MySQL的子查询功能强大,能够在许多复杂查询中帮助我们提取数据,下面这篇文章主要介绍了Mysql数据库中子查询、标量子查询、行子查询、列子查询及表子查询的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • MySQL时区差8小时的多种问题解决方法

    MySQL时区差8小时的多种问题解决方法

    mybatis将本地的数据传入到mysql数据库服务器的时候,服务器会对数据进行检测,会把date类型的数据自动转换为mysql服务器所对应的时区,即0时区,所以会相差8小时,本文给大家介绍了MySQL时区差8小时的问题解决方法,需要的朋友可以参考下
    2024-01-01
  • mysql中inner join和left join使用详解

    mysql中inner join和left join使用详解

    本文主要介绍了mysql中inner join和left join使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • MySQL实操指南之复制表及数据复制全解析

    MySQL实操指南之复制表及数据复制全解析

    在MySQL日常开发和运维中,复制表和复制数据是高频操作,本文就来带大家吃透MySQL复制表和复制数据的所有常用语法,结合实操案例拆解,新手也能快速上手,再也不用踩坑
    2026-04-04
  • SQL中UPDATE和DELETE语句用法的深入理解与应用

    SQL中UPDATE和DELETE语句用法的深入理解与应用

    SQL中的UPDATE语句用于更新表中的数据,而DELETE语句用于删除表中的数据,下面这篇文章主要介绍了SQL中UPDATE和DELETE语句用法的深入理解与应用,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11

最新评论