# Lab03 操作手册 ## 1. 实验目标 本实验完成以下内容: - 在 `StudentCourse` 和 `SPJ` 上创建视图 - 创建用户与角色 - 完成授权与回收权限 - 验证不同账号的权限配置 - 使用脚本完成数据库备份与恢复 ## 2. 截图精简原则 本次截图以“安全控制逻辑完整”为主,建议按阶段保留代表图: - 每个数据库的视图列表与视图结果合并为 1 张 - 用户、角色、授权结果分开截图 - 备份与恢复按终端和查询结果分开截图 全部截图建议控制在 12 张左右,这样既能完整留证,又不会像早期版本那样过度堆砌。 ## 3. 前置条件 - 已完成 Lab01,数据库 `StudentCourse`、`SPJ` 已存在 - Docker 容器 `db-lab-mysql8` 正常运行 如容器未启动,在项目根目录执行: ```bash docker compose up -d docker compose ps ``` 本步骤不需要截图。 ## 4. 执行方式说明 建议按 [Lab03/sql/lab3.sql](../sql/lab3.sql) 中的大节分段执行: - 第 1 节:`StudentCourse` 视图 - 第 2 节:`SPJ` 视图 - 第 3 节:创建用户和角色 - 第 4-6 节:授权、查看权限、删除临时用户 - 第 7 节:运行备份恢复脚本 ## 5. 视图结果验证 先执行脚本中的第 1-2 节,然后检查: ```sql USE StudentCourse; SHOW FULL TABLES WHERE Table_type = 'VIEW'; SELECT * FROM is_student ORDER BY s_no; USE SPJ; SHOW FULL TABLES WHERE Table_type = 'VIEW'; SELECT * FROM supplier_supply_overview ORDER BY SNO, PNO, JNO; ``` 请分别截图: - `shot01.png`:`StudentCourse` 视图列表与 `is_student` 视图验证结果 - `shot02.png`:`SPJ` 视图列表与 `supplier_supply_overview` 视图验证结果 ## 6. 用户、角色与权限结果验证 先执行脚本中的第 3-5 节,然后检查以下内容: ```sql SELECT User, Host FROM mysql.user WHERE User IN ('dev_user', 'prof_li', 'junior_dba', 'public_user', 'teacher_role') ORDER BY User, Host; SHOW GRANTS FOR 'dev_user'@'localhost'; SHOW GRANTS FOR 'public_user'@'localhost'; SHOW GRANTS FOR 'teacher_role'; SHOW GRANTS FOR 'prof_li'@'localhost'; SHOW GRANTS FOR 'junior_dba'@'localhost'; ``` 请分别截图: - `shot03.png`:创建用户和角色后的结果,重点体现 `dev_user`、`prof_li`、`junior_dba`、`public_user`、`teacher_role` 已建立 - `shot04.png`:`dev_user` 的权限结果 - `shot05.png`:`public_user` 的权限结果 - `shot06.png`:`teacher_role` 的权限结果 - `shot07.png`:`prof_li` 的权限结果 - `shot08.png`:`junior_dba` 的权限结果 然后执行脚本中的第 6 节,再执行: ```sql SELECT User, Host FROM mysql.user WHERE User IN ('dev_user', 'prof_li', 'junior_dba', 'public_user', 'teacher_role') ORDER BY User, Host; ``` 若你希望把“删除临时用户”单独留证,请将其保存为: - `shot09.png`:删除 `public_user` 后的用户列表 ## 7. 数据库备份 备份脚本文件为: [backup_restore.sh](backup_restore.sh) 在项目根目录执行: ```bash bash Lab03/manual/backup_restore.sh backup ``` 脚本会在 `Lab03/manual/backups/` 下生成一个 `.sql` 备份文件。 请分别截图: - `shot10.png`:备份命令执行成功,并同时带出 `Lab03/manual/backups/` 目录中生成的备份文件 ## 8. 恢复流程验证 为了验证恢复,按以下顺序操作: 1. 在 DataGrip 中执行: ```sql USE SPJ; DELETE FROM SPJ WHERE SNO = 'S5' AND PNO = 'P6' AND JNO = 'J4'; SELECT * FROM SPJ WHERE SNO = 'S5' AND PNO = 'P6' AND JNO = 'J4'; ``` 2. 假设第 7 步生成的备份文件名为 `lab_backup_YYYYMMDD_HHMMSS.sql`,执行: ```bash bash Lab03/manual/backup_restore.sh restore Lab03/manual/backups/lab_backup_YYYYMMDD_HHMMSS.sql ``` 3. 恢复完成后,在 DataGrip 中再次执行: ```sql USE SPJ; SELECT * FROM SPJ WHERE SNO = 'S5' AND PNO = 'P6' AND JNO = 'J4'; ``` 请分别截图: - `shot11.png`:删除记录后的查询结果,重点体现该记录已不存在 - `shot12.png`:恢复命令执行成功 - `shot13.png`:恢复后再次查询到该记录 ## 9. 建议截图总数 本次 Lab03 建议保留 13 张截图。 这 13 张图已经能够完整覆盖: - 两个数据库的视图 - 用户与角色创建 - 授权与回收 - 角色分配 - 受限管理员权限 - 备份 - 恢复 用于 LaTeX 报告会比十几二十张图更紧凑,也更符合“逻辑清晰、证据完整”的要求。 ## 10. 完成后的存放位置 请将最终保留的截图放入: `Lab03/report/assets/shots/` 截图完成后,告诉我“Lab3 已执行完成,开始写报告”。