如何配置mysql权限表_mysql权限表初始化方法

21次阅读

mysql权限表由初始化命令自动创建,严禁手动修改;应使用CREATE USER、GRANT等sql语句管理权限;初始化后须立即修改root密码、创建业务用户并授权。

如何配置mysql权限表_mysql权限表初始化方法

MySQL 权限表(如 mysql.usermysql.dbmysql.tables_priv 等)在初始化安装时由 mysqld --initialize 或安装脚本自动创建并填充基础数据,**不建议手动配置或直接修改权限表**。正确做法是使用标准 SQL 语句(CREATE USERGRANTREVOKE)来管理权限,MySQL 会自动同步更新底层权限表。

权限表初始化发生在安装/首次启动阶段

MySQL 8.0+ 使用 mysqld --initialize(或 --initialize-insecure)命令初始化数据目录,该过程会:

  • 自动生成 mysql 系统数据库及所有权限表(userdbtables_privcolumns_priv 等)
  • 创建 root 用户记录(密码写入日志或为空,取决于是否加 --initialize-insecure
  • 设置默认权限字段值(如 authentication_stringaccount_lockedpassword_expired

初始化后不可重复执行,否则会报错“data Directory already exists”。

初始化后必须完成的权限配置步骤

初始化仅提供最基础的 root 账户,需立即登录并加固:

  • 用临时密码登录:mysql -u root -p(密码见错误日志中的 “A temporary password is generated…”)
  • 修改 root 密码:ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPass123!';
  • 刷新权限缓存:FLUSH PRIVILEGES;(仅在直接修改表后才需要;用 GRANT 则自动生效)
  • 创建业务用户并授权:CREATE USER 'appuser'@'192.168.1.%' IDENTIFIED BY 'AppPass456!'; GRANT select,INSERT ON mydb.* TO 'appuser'@'192.168.1.%';

不要手动操作 mysql.user 等权限表

直接 INSERT/UPDATE 权限表存在高风险:

  • 字段逻辑复杂(如 pluginauthentication_stringpassword_last_changed 必须匹配)
  • 忽略加密方式(MySQL 8.0 默认 caching_sha2_password,老版本用 mysql_native_password)会导致登录失败
  • 未调用内部验证逻辑,可能造成权限不生效或认证绕过
  • FLUSH PRIVILEGES 不保证全部生效,部分权限(如动态权限)需重启或特殊命令

权限表异常时的修复方法

若权限表损坏(如误删 mysql.user 行、字段被清空),优先选择:

  • 从同版本 MySQL 实例导出干净的 mysql 库结构:mysqldump --no-data --skip-triggers mysql > mysql_schema.sql,再导入修复
  • 使用 mysql_upgrade(MySQL 5.7 及以前)或 mysqld --upgrade=FORCE(MySQL 8.0+)校验并修复系统表
  • 极端情况可重装:备份业务库(mysqldump --all-databases --skip-lock-tables),重新初始化,再导入业务数据
text=ZqhQzanResources