MySQL 数据库用户管理规范(新人操作指南) 文章目录适用环境工作流程1. 目的与 Root 管理原则核心管理规范2. 账号规划与权限模型账号命名规范项目权限隔离结构权限细节以 at133 为例3. 管理员登录4. 创建业务数据库以 at133 为例5. 创建业务账号示例at133_admin6. 赋予数据库权限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 DATABASE2. CREATE USER3. GRANT ALL ON 库.*连接并管理Root 账号create_db_user.sh项目数据库项目_adminRoot只需执行一次脚本即可完成建库、建用户、授权。项目管理员拿到账号后即可独立管理自己的数据库无需再找 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。项目权限隔离结构Agent_CenterALL PRIVILEGESagent_center 数据库agent_center_adminOCRALL PRIVILEGESocr 数据库ocr_adminMESALL PRIVILEGESmes 数据库mes_adminAT133ALL PRIVILEGESat133 数据库at133_admin权限细节以 at133 为例GRANTALLPRIVILEGESONat133.*TOat133_admin%;项目管理员可以CREATE TABLE, DROP TABLE, ALTER TABLEINSERT, UPDATE, DELETE, SELECTCREATE VIEW, CREATE INDEX, CREATE TRIGGER对所属库执行全部 DDL/DML 操作项目管理员不可以CREATE DATABASE / DROP DATABASECREATE USER / DROP USER访问或操作其他数据库3. 管理员登录mysql-uroot-p# 输入 root 密码不显示4. 创建业务数据库以 at133 为例CREATEDATABASEIFNOTEXISTSat133DEFAULTCHARACTERSETutf8mb4DEFAULTCOLLATEutf8mb4_unicode_ci;验证SHOWDATABASES;5. 创建业务账号示例at133_adminCREATEUSERIFNOTEXISTSat133_admin%IDENTIFIEDBYyour_strong_password;使用%允许远程连接若仅本地使用可改为localhost。验证SELECTuser,hostFROMmysql.userWHEREuserat133_admin;6. 赋予数据库权限GRANTALLPRIVILEGESONat133.*TOat133_admin%;MySQL 8.0 中GRANT会隐式刷新权限无需再执行FLUSH PRIVILEGES。7. 验证授权SHOWGRANTSFORat133_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-dbat133_backup.sql--no-create-db确保 SQL 文件中不含CREATE DATABASE仅包含表结构和数据。9.2 业务用户自行导入开发人员拿到备份文件后使用自己的业务账号导入注意-p后不跟任何东西用-D指定数据库mysql-uat133_admin-p-Dat133at133_backup.sql或登录后手动执行mysql-uat133_admin-pmysqlUSE at133;mysqlsource/path/to/at133_backup.sql;所有操作均限定在at133库内业务账号权限完全足够无需 root。9.3 禁止的操作与常见错误禁止将包含CREATE DATABASE语句的备份如使用了--databases或未加--no-create-db分发给业务用户否则导入会因权限不足直接报错。管理员自用全量备份模板严禁外传mysqldump-uroot-p--databasesat133 --single-transaction--routines--triggersat133_full_$(date%Y%m%d).sql此类文件包含建库语句仅限 root 恢复导入前务必再次临时备份。10. 新人入职/接手项目检查清单场景一接手已存在的项目向管理员确认项目数据库名和对应账号如at133_admin。管理员用 root 为你重置密码若遗忘ALTERUSERat133_admin%IDENTIFIEDBY新密码;使用分配账号登录mysql-uat133_admin-p-Dat133场景二项目下线清理资源管理员执行DROPDATABASEIFEXISTSat133;DROPUSERIFEXISTSat133_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$0at133exit1fiDB_NAME$1DB_USER${DB_NAME}_adminechoechoecho数据库 :${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/null21;thenechoecho错误Root密码错误或MySQL服务未启动unsetMYSQL_PWDexit1fi# 创建数据库和用户mysql-urootEOF 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];thenechoechoecho创建失败echoexit1fiechoechoecho创建成功echoecho数据库 :${DB_NAME}echo用户 :${DB_USER}echo密码 :${DB_PASS}echoecho连接示例echomysql -u${DB_USER}-pechoecho${DB_USER}已拥有${DB_NAME}数据库全部权限。赋权并执行chmodx /home/ideoa/create_db_user.sh ./create_db_user.sh at133# 然后依次输入 Root 密码和新用户密码提示若需远程连接请确保 MySQL 已监听0.0.0.0见/etc/mysql/my.cnf中bind-address并配置防火墙允许 3306 端口。