# P25 25. 基础-SQL-DCL-权限控制-

> 本页是学习笔记，不等同于视频逐字稿。原声字幕未取得（匿名接口字幕轨为空且需登录，未使用任何账号），也没有逐句讲解记录；讲义只按节与页码对应，切点未逐句确证。

> 以同版讲义的公开镜像核对章节与页码（镜像非官方出品）；非逐字稿，示例为原创补充。

## P25 25. 基础-SQL-DCL-权限控制-

- 原视频：https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=25（p=25），时长 8:25
- 讲义：2.7.2 权限控制 p52（公开镜像；按主题对应，切点 notexact）

- 本集练习数据：practice/p25.sql（先执行，再对照小例）

### 一句话理解

权限控制决定“连进来以后能做什么”：给账号授权、收回权限，粒度可以细到某库某表。

### 步骤

1. 先有账号再授权：`CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';` 建号，然后 `GRANT 权限列表 ON 库名.表名 TO '用户名'@'主机名';` 授权，多个权限用逗号分隔。MySQL 8 的 GRANT 不会自动建号，账号不存在会报 1410。
2. 收回：REVOKE 权限列表 ON 库名.表名 FROM '用户名'@'主机名'。
3. 查看：SHOW GRANTS FOR '用户名'@'主机名'，确认实际生效的权限。
4. 用该账号实际连一次，验证能查、不能改，而不是只看语句执行成功。

### SQL 示例

```
-- 本机学习演示：账号只在本机，脚本结束就删号；密码是写出来给人看的占位串，不是真实口令
DROP USER IF EXISTS 'mysqlnotes_demo'@'localhost';
CREATE USER 'mysqlnotes_demo'@'localhost' IDENTIFIED BY 'LocalOnly_Demo_ChangeMe_01';
GRANT SELECT, INSERT ON mysqlnotes_p25.employee TO 'mysqlnotes_demo'@'localhost';
SHOW GRANTS FOR 'mysqlnotes_demo'@'localhost';
REVOKE INSERT ON mysqlnotes_p25.employee FROM 'mysqlnotes_demo'@'localhost';
DROP USER 'mysqlnotes_demo'@'localhost';
```

说明：【原创演示】这是本机学习用的演示账号：`'mysqlnotes_demo'@'localhost'` 只在你自己机器上存在，由本页练习脚本 p25.sql 建库、建号，结束时删号，和视频里的 itcast/heima 账号无关；密码 `LocalOnly_Demo_ChangeMe_01` 是明显的占位串，不是任何真实口令或生产凭据。这几句演示“建号 → 给 mysqlnotes_p25.employee 授查+插 → SHOW GRANTS 复核 → 收回插入只留查询 → 删号”，授权范围写死到库.表，不用 *.*。本页原创例已在隔离的 MySQL 8.0.46 实例跑通（临时库 + 临时账号，结束即清理）；真实环境请换成自己保管的强密码，别把密码写进仓库。

### 易错点

- 图快把全部权限一次性授到整个实例：一旦出问题既难定位也难收窄；应当逐项授权、限定到库.表。
- 只授权不看 SHOW GRANTS：账号可能还带着之前的旧权限，改完必须复核。
- 直接改 mysql 库的权限表就以为生效：手工改表需要额外刷新权限，正规做法是用 GRANT/REVOKE。

### 30 秒速记

GRANT/REVOKE 权限 ON 库.表 TO/FROM 账号；SHOW GRANTS 复核；范围越小越好。

### 自测

1. 为什么示例把权限限定到 mysqlnotes_p25.employee，而不是整库？
   - 答：权限范围越小，误用和被盗的影响面越小；只读账号不需要同库其它表的写权限。
2. 授予成功后怎样确认真的生效？
   - 答：先用 SHOW GRANTS 看记录，再用该账号实际连一次执行允许和不允许的操作；两步都过才算验证。

### 材料与来源

- [平台视频页] P25 原视频页（BV1Kr4y1i7ru） https://www.bilibili.com/video/BV1Kr4y1i7ru/?p=25
- [官方文档] MySQL 8.0 Reference：GRANT 语句 https://dev.mysql.com/doc/refman/8.0/en/grant.html

证据说明：P25 标题为“DCL-权限控制”。采样帧 t40 可见讲师在 Workbench 里演示建号/改密/删号（账号名形如 itcast@localhost、heima@%），具体授权语句未在帧中取得；正文 GRANT/REVOKE 示例按 MySQL 8.0 语法原创编写，使用 localhost 演示账号与独立练习库 mysqlnotes_p25；本页原创例已在隔离的 MySQL 8.0.46 实测通过（账号建完即删，公开的密码是本机占位串，不含真实凭据），未照抄视频账号。
