MySQL 数据库用户管理规范(新人操作指南)
📅 2026/7/3 16:19:25
👁️ 阅读次数
📝 编程学习
文章目录
- 适用环境
- 工作流程
- 1. 目的与 Root 管理原则
- 核心管理规范
- 2. 账号规划与权限模型
- 账号命名规范
- 项目权限隔离结构
- 权限细节(以 at133 为例)
- 3. 管理员登录
- 4. 创建业务数据库(以 at133 为例)
- 5. 创建业务账号(示例:at133_admin)
- 6. 赋予数据库权限
- 7. 验证授权
- 8. 业务用户登录测试
- 9. 日常导出与导入(关键:业务账号可自行导入)
- 9.1 正确的导出命令(管理员执行)
- 9.2 业务用户自行导入
- 9.3 禁止的操作与常见错误
- 10. 新人入职/接手项目检查清单
- 场景一:接手已存在的项目
- 场景二:项目下线,清理资源
- 附录:自动化创建脚本(create_db_user.sh)
适用环境
Linux账号:ideoa(多人共用) MySQL管理员:root 项目示例:AT133、MES、OCR、Agent Center ...工作流程
- Root只需执行一次脚本,即可完成建库、建用户、授权。
- 项目管理员拿到账号后,即可独立管理自己的数据库,无需再找 root。
1. 目的与 Root 管理原则
- 禁止业务系统直接使用
root账号。 - Root 仅用于:创建数据库、创建项目账号、分配权限、备份恢复、数据库维护。
- 严禁将 root 用于应用连接、项目开发或程序配置。
- 管理员负责 root 操作,开发人员只使用分配的业务账号。
核心管理规范
- 一个项目 → 一个独立数据库 → 一个专属管理员账号(命名:
项目名_admin),仅授予该库全部权限。 - 常用命名示例:
at133_admin、mes_admin、ocr_admin、agent_center_admin。 - 禁止所有项目共用
root。 - 管理员职责:建库、建用户、权限分配、备份恢复。
- 开发人员职责:使用分配的账号管理自己的库。
- 导出数据库务必使用
--no-create-db,确保业务用户能自主导入。
2. 账号规划与权限模型
账号命名规范
- 每个项目一个独立数据库,一个专属管理员账号。
- 账号格式:
项目名_admin(例如at133_admin)。
项目权限隔离结构
权限细节(以 at133 为例)
GRANTALLPRIVILEGESONat133.*TO'at133_admin'@'%';项目管理员可以:
- CREATE TABLE, DROP TABLE, ALTER TABLE
- INSERT, UPDATE, DELETE, SELECT
- CREATE VIEW, CREATE INDEX, CREATE TRIGGER
- 对所属库执行全部 DDL/DML 操作
项目管理员不可以:
- CREATE DATABASE / DROP DATABASE
- CREATE USER / DROP USER
- 访问或操作其他数据库
3. 管理员登录
mysql-uroot-p# 输入 root 密码(不显示)4. 创建业务数据库(以 at133 为例)
CREATEDATABASEIFNOTEXISTSat133DEFAULTCHARACTERSETutf8mb4DEFAULTCOLLATEutf8mb4_unicode_ci;验证:
SHOWDATABASES;5. 创建业务账号(示例:at133_admin)
CREATEUSERIFNOTEXISTS'at133_admin'@'%'IDENTIFIEDBY'your_strong_password';使用
%允许远程连接,若仅本地使用可改为'localhost'。
验证:
SELECTuser,hostFROMmysql.userWHEREuser='at133_admin';6. 赋予数据库权限
GRANTALLPRIVILEGESONat133.*TO'at133_admin'@'%';MySQL 8.0 中
GRANT会隐式刷新权限,无需再执行FLUSH PRIVILEGES。
7. 验证授权
SHOWGRANTSFOR'at133_admin'@'%';预期输出GRANT ALL PRIVILEGES ON \at133`.*`,确认无法管理其他库。
8. 业务用户登录测试
exit# 退出 rootmysql-uat133_admin-p查看可访问的库:
SHOWDATABASES;预期输出中包含at133和information_schema。
information_schema是 MySQL 系统库,所有用户均可查看(无权限修改),可以忽略。
9. 日常导出与导入(关键:业务账号可自行导入)
9.1 正确的导出命令(管理员执行)
导出时必须抑制建库语句,否则业务用户会因缺少全局权限而导入失败。
mysqldump-uroot-pat133 --no-create-db>at133_backup.sql
--no-create-db确保 SQL 文件中不含CREATE DATABASE,仅包含表结构和数据。
9.2 业务用户自行导入
开发人员拿到备份文件后,使用自己的业务账号导入(注意:-p后不跟任何东西,用-D指定数据库):
mysql-uat133_admin-p-Dat133<at133_backup.sql或登录后手动执行:
mysql-uat133_admin-pmysql>USE at133;mysql>source/path/to/at133_backup.sql;所有操作均限定在at133库内,业务账号权限完全足够,无需 root。
9.3 禁止的操作与常见错误
- 禁止将包含
CREATE DATABASE语句的备份(如使用了--databases或未加--no-create-db)分发给业务用户,否则导入会因权限不足直接报错。 - 管理员自用全量备份模板(严禁外传):
此类文件包含建库语句,仅限 root 恢复,导入前务必再次临时备份。mysqldump-uroot-p--databasesat133 --single-transaction--routines--triggers>at133_full_$(date+%Y%m%d).sql
10. 新人入职/接手项目检查清单
场景一:接手已存在的项目
- 向管理员确认项目数据库名和对应账号(如
at133_admin)。 - 管理员用 root 为你重置密码(若遗忘):
ALTERUSER'at133_admin'@'%'IDENTIFIEDBY'新密码'; - 使用分配账号登录:
mysql-uat133_admin-p-Dat133
场景二:项目下线,清理资源
管理员执行:
DROPDATABASEIFEXISTSat133;DROPUSERIFEXISTS'at133_admin'@'%';附录:自动化创建脚本(create_db_user.sh)
保存至/home/ideoa/create_db_user.sh,密码全部通过交互式输入,不会记录在历史或进程列表中。
#!/bin/bash# ==========================================# MySQL 项目数据库创建脚本# 用法:# ./create_db_user.sh 数据库名## 示例:# ./create_db_user.sh at133# ==========================================# 参数检查if[$#-ne1];thenecho"用法:"echo"$0数据库名"echoecho"示例:"echo"$0at133"exit1fiDB_NAME=$1DB_USER="${DB_NAME}_admin"echoecho"=================================="echo"数据库 :${DB_NAME}"echo"用户 :${DB_USER}"echo"=================================="# 输入 Root 密码read-s-p"请输入Root密码: "ROOT_PASSecho# 输入项目管理员密码read-s-p"请输入${DB_USER}的密码: "DB_PASSecho# 使用环境变量避免密码出现在进程列表exportMYSQL_PWD="$ROOT_PASS"# 检查 Root 是否能登录if!mysqladminping-uroot--silent>/dev/null2>&1;thenechoecho"错误:Root密码错误或MySQL服务未启动!"unsetMYSQL_PWDexit1fi# 创建数据库和用户mysql-uroot<<EOF CREATE DATABASE IF NOT EXISTS \`${DB_NAME}\`DEFAULT CHARACTER SET utf8mb4 DEFAULT COLLATE utf8mb4_unicode_ci; CREATE USER IF NOT EXISTS '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASS}'; ALTER USER '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASS}'; GRANT ALL PRIVILEGES ON \`${DB_NAME}\`.* TO '${DB_USER}'@'%'; FLUSH PRIVILEGES; EOFRESULT=$?# 清理密码变量unsetMYSQL_PWD# 判断执行结果if[$RESULT-ne0];thenechoecho"=================================="echo"创建失败!"echo"=================================="exit1fiechoecho"=================================="echo"创建成功"echo"=================================="echo"数据库 :${DB_NAME}"echo"用户 :${DB_USER}"echo"密码 :${DB_PASS}"echoecho"连接示例:"echo"mysql -u${DB_USER}-p"echoecho"${DB_USER}已拥有${DB_NAME}数据库全部权限。"赋权并执行:
chmod+x /home/ideoa/create_db_user.sh ./create_db_user.sh at133# 然后依次输入 Root 密码和新用户密码提示:若需远程连接,请确保 MySQL 已监听
0.0.0.0(见/etc/mysql/my.cnf中bind-address),并配置防火墙允许 3306 端口。
编程学习
技术分享
实战经验