在掌握了 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 的进阶知识点,比如事务、索引、存储过程等,进一步提升数据库使用能力!
希望这篇文章对你有帮助,如果你有任何问题或建议,欢迎在评论区留言。谢谢阅读(求攒攒 收藏 关注)!
