首页/数据/数据库速查/CREATE USER 创建账号(用户名@主机)

CREATE USER 创建账号(用户名@主机)

MySQL 账号由用户名与来源主机共同定义:'app'@'%' 与 'app'@'localhost' 是两条独立账号,密码策略与插件随账号设置。

数据库速查数据更新于 2026-10-13

CREATE USER 是什么

CREATE USER 用来创建数据库账号,而 MySQL 的账号身份由用户名与来源主机两部分共同组成:'app'@'%' 与 'app'@'localhost' 是两条互相独立的账号,口令、认证插件和权限都要分别设置。创建语句本身不带任何权限,必须再单独授权才能访问数据。8.0 默认认证插件是 caching_sha2_password,老客户端不认识它时,才需要针对个别账号改用旧插件。

基本信息

用途创建数据库账号
语法CREATE USER '用户'@'主机' IDENTIFIED BY '口令'
主机通配% 任意主机、10.0.% 网段、localhost 本机
默认认证插件caching_sha2_password(MySQL 8.0)
权限关系建账号不含任何权限,需要配合授权语句
配套操作ALTER USER 改口令或插件、DROP USER 删除

典型使用场景

  • 新业务上线按应用分配独立账号,便于审计与限权
  • 只读账号给报表与数据分析工具使用,只授查询权限
  • 运维账号绑定本机来源,避免从其他机器登录
  • 兼容老客户端:为特定账号单独指定旧认证插件
  • 临时排障账号设短生命周期,用完立即删除
  • 多环境分别建账号,生产与测试不共用凭证

创建示例

创建示例
CREATE USER 'app'@'10.0.%' IDENTIFIED BY 'Str0ng#Passw0rd!';   # 按来源网段建账号
CREATE USER 'readonly'@'%' IDENTIFIED BY 'Str0ng#Passw0rd!';   # 只读账号,仍需单独授权
CREATE USER 'ops'@'localhost' IDENTIFIED BY 'Str0ng#Passw0rd!';   # 仅本机可登录
CREATE USER 'app2'@'%' IDENTIFIED WITH mysql_native_password BY 'Legacy#Pass1';   # 老客户端兼容

账号维护

账号维护
ALTER USER 'app'@'10.0.%' IDENTIFIED BY 'NewStr0ng#Pass!';   # 修改口令
ALTER USER 'app'@'10.0.%' ACCOUNT LOCK;   # 临时禁用账号,解锁用 ACCOUNT UNLOCK
DROP USER 'ops'@'localhost';   # 删除账号,其授权一并清除
SELECT user, host, plugin, account_locked FROM mysql.user ORDER BY user, host;   # 盘点现有账号

来源主机写法

写法匹配范围建议用途
localhost仅本机且经本地 socket 连接运维脚本与本地工具
127.0.0.1仅本机但走 TCP与 localhost 是两条独立记录
10.0.%该网段内的所有主机应用账号推荐写法
192.168.1.10单个固定地址跳板机或固定节点
%任意来源主机公网环境慎用
localhost 与 % 并存按更具体的主机取值优先匹配本地与远程分别配置时使用
创建账号不会附带任何权限,必须紧接着授权;主机通配不要随意写 %,除非确实需要任意来源可达,管理类账号尤其要限制到本机或跳板机。
8.0 默认使用 caching_sha2_password,老旧客户端连不上时,只把出问题的那个账号改成 mysql_native_password,而不是把整个实例的默认插件降级。
修改账号口令会影响所有使用该账号的连接池实例,改密前先通知使用方,改后盯一会儿登录失败告警,避免一次性打断全部应用。

账号管理规范

  • 一个应用一个账号,禁止多个系统共用同一凭证
  • 来源主机尽量收敛到网段,管理账号只用本机或跳板机
  • 口令统一交给密钥管理或配置中心,不写进代码与镜像
  • 定期按账号清单核对使用情况与权限是否仍然必要
  • 服务下线或人员离职后立即删除账号并回收授权
  • 账号的插件与锁定状态纳入巡检,登录失败要能告警
账号名与主机组合必须是唯一的:重复创建同名同主机的账号会直接报错,遇到这种情况应改用修改语句调整口令或插件,而不是换个名字绕开。

易错点

  • 以为建了账号就能连库:账号本身不带任何权限,登录后访问数据仍然报权限不足,必须紧接着完成授权
  • 把来源主机写成 %:登录面被开放到任意地址,一旦口令泄露,从任何位置都能接入
  • 只改了口令没有通知连接池使用方:所有实例同时重连失败,业务中断时间被成倍放大
  • 直接修改授权系统表来添加账号:认证信息不会被正确初始化,登录失败且极难排查,必须使用专门的账号管理语句
  • 为兼容老客户端把默认认证插件全局降级:新账号全部退回弱哈希算法,安全基线被整体拉低,应只对个别账号单独指定

数据来源与参考

  • MySQL 8.0 Reference Manual: CREATE USER Statement

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌