MySQL 数据库用户管理规范(新人操作指南)

📅 2026/7/3 16:19:25 👁️ 阅读次数 📝 编程学习
MySQL 数据库用户管理规范(新人操作指南)

文章目录

    • 适用环境
      • 工作流程
    • 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 ...

工作流程

执行

1. CREATE DATABASE

2. CREATE USER

3. GRANT ALL ON 库.*

连接并管理

Root 账号

create_db_user.sh

项目数据库

项目_admin

  • Root只需执行一次脚本,即可完成建库、建用户、授权。
  • 项目管理员拿到账号后,即可独立管理自己的数据库,无需再找 root。

1. 目的与 Root 管理原则

  • 禁止业务系统直接使用root账号
  • Root 仅用于:创建数据库、创建项目账号、分配权限、备份恢复、数据库维护。
  • 严禁将 root 用于应用连接、项目开发或程序配置。
  • 管理员负责 root 操作,开发人员只使用分配的业务账号。

核心管理规范

  • 一个项目 → 一个独立数据库 → 一个专属管理员账号(命名:项目名_admin),仅授予该库全部权限。
  • 常用命名示例:at133_adminmes_adminocr_adminagent_center_admin
  • 禁止所有项目共用root
  • 管理员职责:建库、建用户、权限分配、备份恢复。
  • 开发人员职责:使用分配的账号管理自己的库。
  • 导出数据库务必使用--no-create-db,确保业务用户能自主导入。

2. 账号规划与权限模型

账号命名规范

  • 每个项目一个独立数据库,一个专属管理员账号。
  • 账号格式:项目名_admin(例如at133_admin)。

项目权限隔离结构

Agent_Center

ALL PRIVILEGES

agent_center 数据库

agent_center_admin

OCR

ALL PRIVILEGES

ocr 数据库

ocr_admin

MES

ALL PRIVILEGES

mes 数据库

mes_admin

AT133

ALL PRIVILEGES

at133 数据库

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;

预期输出中包含at133information_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)分发给业务用户,否则导入会因权限不足直接报错。
  • 管理员自用全量备份模板(严禁外传)
    mysqldump-uroot-p--databasesat133 --single-transaction--routines--triggers>at133_full_$(date+%Y%m%d).sql
    此类文件包含建库语句,仅限 root 恢复,导入前务必再次临时备份。

10. 新人入职/接手项目检查清单

场景一:接手已存在的项目

  1. 向管理员确认项目数据库名和对应账号(如at133_admin)。
  2. 管理员用 root 为你重置密码(若遗忘):
    ALTERUSER'at133_admin'@'%'IDENTIFIEDBY'新密码';
  3. 使用分配账号登录:
    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.cnfbind-address),并配置防火墙允许 3306 端口。