【MySQL 零基础入门】DCL 核心语法全解析:用户管理与权限控制篇
admin2026-10-20 14:25:27【世界杯比赛回放视频】
在掌握了 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 的用户信息存储在系统数据库 mysql 的 user 表中,每个用户由 用户名 + 主机地址 唯一标识(比如 '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.student:sicheng 数据库的 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 '用户'@'主机'
避免给普通用户授予 ALL 或 DROP 权限
撤销权限
revoke 权限 on 库.表 from '用户'@'主机'
撤销范围需与授权范围完全匹配
安全原则
最小权限原则,按角色分配权限
生产环境禁止使用 root 用户连接应用程序
六、写在最后:SQL 语言体系收尾
至此,我们已经完整学习了 MySQL 的四大核心语言:
DDL:定义数据库 / 表结构(创建、修改、删除);
DML:操作表中数据(增、删、改);
DQL:查询表中数据(核心,业务开发高频);
DCL:管理用户与权限(保障数据库安全)。
这四大语言构成了 MySQL 操作的完整体系,从基础的结构搭建到数据操作,再到权限管控,覆盖了开发和运维的核心需求。后续我们还可以深入学习 MySQL 的进阶知识点,比如事务、索引、存储过程等,进一步提升数据库使用能力!
希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!