【MySQL 零基础入门】DCL 核心语法全解析:用户管理与权限控制篇

在掌握了 DDL(结构操作)、DML(数据操作)、DQL(数据查询)后,今天我们来学习 MySQL 的第四大核心语言 ------DCL(数据控制语言) 。DCL 主要负责管理数据库用户和控制访问权限,是保障数据库安全的关键,尤其适合数据库管理员(DBA)或需要配置项目数据库权限的开发人员。本文将基于 sicheng 数据库场景,拆解 DCL 的核心语法!


目录

[一、DCL 概述:数据库的 "安全管家"](#一、DCL 概述:数据库的 “安全管家”)

[1. 什么是 DCL](#1. 什么是 DCL)

[2. DCL 的应用场景](#2. DCL 的应用场景)

[二、用户管理:控制 "谁能访问" 数据库](#二、用户管理:控制 “谁能访问” 数据库)

[1. 查询用户:查看现有用户](#1. 查询用户:查看现有用户)

[2. 创建用户:新增数据库访问账户](#2. 创建用户:新增数据库访问账户)

[案例 1:创建仅本地访问的用户](#案例 1:创建仅本地访问的用户)

[案例 2:创建允许任意主机访问的用户](#案例 2:创建允许任意主机访问的用户)

[3. 修改用户密码:重置账户密码](#3. 修改用户密码:重置账户密码)

[4. 删除用户:移除无效访问账户](#4. 删除用户:移除无效访问账户)

[三、权限控制:控制 "能做什么" 操作](#三、权限控制:控制 “能做什么” 操作)

[1. 常用权限类型](#1. 常用权限类型)

[2. 查询用户权限:查看已分配权限](#2. 查询用户权限:查看已分配权限)

[3. 授予权限:给用户分配操作权限](#3. 授予权限:给用户分配操作权限)

[案例 1:授予只读权限](#案例 1:授予只读权限)

[案例 2:授予多权限](#案例 2:授予多权限)

[案例 3:授予所有权限(谨慎使用)](#案例 3:授予所有权限(谨慎使用))

[4. 撤销权限:回收用户的操作权限](#4. 撤销权限:回收用户的操作权限)

[四、DCL 核心原则:最小权限原则](#四、DCL 核心原则:最小权限原则)

[五、DCL 核心知识点总结](#五、DCL 核心知识点总结)

[六、写在最后:SQL 语言体系收尾](#六、写在最后:SQL 语言体系收尾)


一、DCL 概述:数据库的 "安全管家"

1. 什么是 DCL

DCL 全称 Data Control Language(数据控制语言),核心功能有两个:

  • 管理数据库用户:创建、修改、删除用户,控制谁能访问数据库服务器;
  • 控制访问权限:给用户分配 / 撤销操作权限,限制用户能操作哪些数据库、哪些表。

2. DCL 的应用场景

  • 项目部署时,创建只读用户供应用程序访问数据库(避免使用 root 用户,降低权限风险);
  • 多团队协作时,给不同团队分配不同数据库的操作权限(如开发团队只能操作测试库,运维团队可操作生产库);
  • 离职员工权限回收,防止数据泄露。

二、用户管理:控制 "谁能访问" 数据库

MySQL 的用户信息存储在系统数据库 mysqluser 表中,每个用户由 用户名 + 主机地址 唯一标识(比如 'stu_user'@'localhost''stu_user'@'%' 是两个不同的用户)。

1. 查询用户:查看现有用户

语法

sql 复制代码
use mysql;  -- 切换到系统数据库mysql
select user, host from user;  -- 查询用户名和允许访问的主机

关键字段说明

  • user:用户名;
  • host:允许访问的主机(localhost 表示仅本地访问,% 表示任意主机访问,也可指定具体 IP 如 192.168.1.100)。

示例

查询 mysql.user 表,可看到默认的 root 用户(主机为 localhost%),以及我们后续创建的用户。

sql 复制代码
use mysql;
select * from mysql.user;

2. 创建用户:新增数据库访问账户

基本语法

sql 复制代码
create user '用户名'@'主机地址' identified by '密码';

案例 1:创建仅本地访问的用户

需求:创建用户 sicheng,仅允许本地(localhost)访问,密码为 123456

sql 复制代码
create user 'sicheng'@'localhost' identified by '123456';

案例 2:创建允许任意主机访问的用户

需求:创建用户 bingyi,允许从任意主机访问(% 是通配符),密码为 654321

sql 复制代码
create user 'bingyi'@'%' identified by '654321';

注意事项

  • 新创建的用户默认没有任何权限(连查询数据库的权限都没有),需要手动授权;
  • 主机地址不能省略,否则默认是 %(任意主机)。

3. 修改用户密码:重置账户密码

基本语法

sql 复制代码
alter user '用户名'@'主机地址' identified with mysql_native_password by '新密码';

示例

修改 sicheng 用户的密码为 654321

sql 复制代码
alter user 'sicheng'@'localhost' identified with mysql _native_password by '654321';

说明

  • mysql_native_password 是 MySQL 的密码加密方式(5.7/8.0 版本推荐使用);
  • 修改后需用新密码重新登录验证。

4. 删除用户:移除无效访问账户

基本语法

sql 复制代码
drop user '用户名'@'主机地址';

示例

删除仅本地访问的 bingyi 用户:

复制代码
drop user 'stu_local'@'localhost';

验证方法

删除后再次查询 mysql.user 表,确认该用户记录已消失。

三、权限控制:控制 "能做什么" 操作

用户创建后默认只有登录权限,需要通过 GRANT(授权)和 REVOKE(撤销权限)来控制用户能执行的操作。

1. 常用权限类型

MySQL 支持细粒度的权限控制,常见权限如下:

权限关键字 说明 适用场景
ALL/ALL PRIVILEGES 所有权限(超级权限) 仅授予管理员
SELECT 查询数据权限 应用程序只读账户
INSERT 插入数据权限 数据录入账户
UPDATE 修改数据权限 数据编辑账户
DELETE 删除数据权限 谨慎授予(高危)
ALTER 修改表结构权限 开发人员(测试库)
DROP 删除数据库 / 表权限 仅授予管理员(高危)
CREATE 创建数据库 / 表权限 开发人员(测试库)

2. 查询用户权限:查看已分配权限

语法

sql 复制代码
show grants for '用户名'@'主机地址';

示例

查询 sicheng 用户的权限:

sql 复制代码
show grants for 'sicheng'@'localhost';

执行结果

新创建的用户默认只有 USAGE 权限(仅能登录,无其他操作权限)。

3. 授予权限:给用户分配操作权限

基本语法

sql 复制代码
grant 权限列表 on 数据库名.表名 to '用户名'@'主机地址';

通配符说明

  • *.*:所有数据库的所有表;
  • sicheng.*sicheng 数据库的所有表;
  • sicheng.studentsicheng 数据库的 student 表。

案例 1:授予只读权限

需求:给 sicheng 用户授予 sicheng 数据库所有表的查询权限。

sql 复制代码
grant select on sicheng.* to 'sicheng'@'localhost';

案例 2:授予多权限

需求:给 sicheng 用户授予 sicheng.student 表的查询、插入、修改权限。

sql 复制代码
grant select,insert,update on sicheng.* to'sicheng'@'localhost';

案例 3:授予所有权限(谨慎使用)

需求:给 sicheng 用户授予 sicheng 数据库所有表的所有权限(仅示例,生产环境慎用)。

sql 复制代码
grant all on sicheng.* to 'sicheng'@'localhost';

4. 撤销权限:回收用户的操作权限

基本语法

sql 复制代码
revoke 权限列表 on 数据库名.表名 from '用户名'@'主机地址';

示例

撤销 sicheng 用户对 sicheng.student 表的修改权限:

sql 复制代码
revoke update on sicheng.student from 'sicheng'@'%';

注意事项

  • 撤销权限后立即生效,无需重启服务;
  • 撤销权限需与授权时的范围完全匹配(如授权 sicheng.*,撤销也需指定 sicheng.*)。

四、DCL 核心原则:最小权限原则

在实际应用中,给用户分配权限需遵循 最小权限原则------ 只授予用户完成工作所需的最小权限,避免权限过大导致数据风险:

  • 应用程序账户:仅授予 SELECT(查询)、INSERT(插入)、UPDATE(修改)权限,绝不授予 DROP(删除)、ALTER(改结构)权限;
  • 开发人员账户:授予测试库的所有权限,但不授予生产库的权限;
  • 管理员账户:严格控制数量,仅授予必要的超级权限。

五、DCL 核心知识点总结

知识点 核心内容 易错点
用户管理 用户名 + 主机地址唯一标识用户;create user/alter user/drop user 忘记指定主机地址,默认 % 存在安全风险
权限查询 show grants for '用户'@'主机' 新用户默认只有 USAGE 权限(仅登录)
授权操作 grant 权限 on 库.表 to '用户'@'主机' 避免给普通用户授予 ALLDROP 权限
撤销权限 revoke 权限 on 库.表 from '用户'@'主机' 撤销范围需与授权范围完全匹配
安全原则 最小权限原则,按角色分配权限 生产环境禁止使用 root 用户连接应用程序

六、写在最后:SQL 语言体系收尾

至此,我们已经完整学习了 MySQL 的四大核心语言:

  • DDL:定义数据库 / 表结构(创建、修改、删除);
  • DML:操作表中数据(增、删、改);
  • DQL:查询表中数据(核心,业务开发高频);
  • DCL:管理用户与权限(保障数据库安全)。

这四大语言构成了 MySQL 操作的完整体系,从基础的结构搭建到数据操作,再到权限管控,覆盖了开发和运维的核心需求。后续我们还可以深入学习 MySQL 的进阶知识点,比如事务、索引、存储过程等,进一步提升数据库使用能力!


希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!

相关推荐
武子康2 小时前
Java-192 深入拆解 EVCache 内部原理:Memcached 架构、Slab 分配与 LRU 过期机制全解析
数据库·redis·缓存·架构·memcached·guava·evcache
熬了夜的程序员2 小时前
【Rust学习之路】序
开发语言·后端·学习·rust
代码游侠2 小时前
学习笔记——进程
linux·运维·笔记·学习·算法
你好,帅哥2 小时前
sqlcipher 编译
数据库
weixin_447671992 小时前
【MySQL从节点异常断连后的Slave_SQL_Running 处于Connecting的解决方案】
android·sql·mysql
roman_日积跬步-终至千里2 小时前
【源码分析】StarRocks TRUNCATE 语句执行流程:从 SQL 到数据清空的完整旅程
java·数据库·sql
ClouGence2 小时前
从 0 到 1 构建 TDSQL MySQL 实时同步链路
数据库·分布式·sql·mysql
期待のcode2 小时前
MyBatis-Plus通用枚举
java·数据库·后端·mybatis·springboot
编织幻境的妖3 小时前
数据库物化视图与普通视图区别
数据库·oracle