mysql菜鸟教程

专栏导航

17.1 创建用户账户

      在 MySQL 中,用户账户是访问数据库的凭证。每个用户由用户名主机名(即允许从哪台机器连接)唯一标识。合理创建和管理用户是保障数据库安全的第一步。本节将介绍如何使用 CREATE USER 语句创建新用户,并设置其基本属性。

一、创建用户的基本语法


CREATE USER [IF NOT EXISTS] '用户名'@'主机名'
    [IDENTIFIED BY '密码']
    [身份验证选项]
    [账户限制选项]
    [密码管理选项]
    [账户锁定选项];

各部分含义

  • 用户名:用于登录的账号名称,通常不超过 32 个字符。

  • 主机名:指定允许从哪台机器连接。可以是:

    • 'localhost':仅允许本地连接。

    • '%':允许从任何主机远程连接(生产环境需谨慎)。

    • '192.168.1.%':允许从指定网段连接。

    • 'example.com':允许从特定域名连接。

  • IDENTIFIED BY:设置用户的密码(明文,MySQL 会自动加密存储)。

  • IF NOT EXISTS:如果同名同主机的用户已存在,则不会报错(MySQL 5.7.6 后支持)。

二、基础示例

1. 创建最简单的本地用户

CREATE USER 'zhangsan'@'localhost' IDENTIFIED BY '123456';

这条语句创建一个用户 zhangsan,仅允许从本地连接,密码为 123456

注意:生产环境应使用强密码,避免简单密码。

2. 创建允许从任意主机连接的用户


CREATE USER 'lisi'@'%' IDENTIFIED BY 'LiSi2025!';

'%' 表示允许从任何 IP 连接,但不包括 localhostlocalhost 是特殊域名,需要通过 Unix socket 连接)。如果希望同时允许本地和远程,通常需要分别创建两个账户,或使用通配符并注意。

3. 创建用户并指定密码过期

强制用户在第一次登录时修改密码:

CREATE USER 'wangwu'@'localhost'
IDENTIFIED BY 'WangWu2025!'
PASSWORD EXPIRE;

登录后,用户会收到需要修改密码的提示。

4. 创建用户并锁定账户

创建后暂时不允许登录:

CREATE USER 'zhaoliu'@'localhost'
IDENTIFIED BY 'ZhaoLiu2025!'
ACCOUNT LOCK;

之后可以用 ALTER USER ... ACCOUNT UNLOCK; 解锁。

三、身份验证插件

MySQL 支持多种身份验证方式,常用的有:

  • mysql_native_password:传统的密码验证(MySQL 8.0 前默认)。

  • caching_sha2_password:MySQL 8.0 默认的更快更安全的验证方式。

  • sha256_password:使用 SHA-256 加密。

  • authentication_ldap_simple:LDAP 集成等。

可以通过 IDENTIFIED WITH 子句指定验证插件:

CREATE USER 'liqi'@'localhost'
IDENTIFIED WITH mysql_native_password BY 'LiQi2025!';

如果未指定,使用系统变量 default_authentication_plugin 定义的默认插件(MySQL 8.0 中默认为 caching_sha2_password)。

四、指定用户资源限制(可选)

可以限制用户每小时查询次数、连接数等:

CREATE USER 'test'@'localhost'
IDENTIFIED BY 'Test2025!'
WITH
    MAX_QUERIES_PER_HOUR 100
    MAX_UPDATES_PER_HOUR 50
    MAX_CONNECTIONS_PER_HOUR 20
    MAX_USER_CONNECTIONS 5;

这些限制有助于防止单个用户过度消耗资源。

五、密码管理选项

MySQL 8.0 开始支持更精细的密码管理,例如:

  • PASSWORD EXPIRE INTERVAL 30 DAY:密码每 30 天过期。

  • PASSWORD HISTORY 5:禁止使用最近 5 次用过的密码。

  • PASSWORD REUSE INTERVAL 365 DAY:密码重用间隔。

  • FAILED_LOGIN_ATTEMPTS 3 和 PASSWORD_LOCK_TIME 2:失败登录锁定(需要安装密码验证插件)。

示例:

CREATE USER 'admin'@'localhost'
IDENTIFIED BY 'Admin2025!'
PASSWORD EXPIRE INTERVAL 90 DAY
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1;

六、查看已创建的用户

用户信息存储在系统数据库 mysql 的 user 表中:

SELECT user, host, account_locked, password_expired
FROM mysql.user;

也可以使用 SHOW CREATE USER 查看用户定义:

SHOW CREATE USER 'zhangsan'@'localhost';

七、注意事项

  1. 用户名和主机名要加引号:字符串类型,必须用单引号或双引号包裹。

  2. 主机名不要遗漏'user'@'host' 是一个整体,如果不写 @'host',默认主机名为 '%'

  3. 密码安全:避免在脚本中明文写入密码,可以使用 IDENTIFIED BY PASSWORD 'hashed_string' 直接指定哈希值(PASSWORD 关键字在 MySQL 8.0 中已移除,应使用 IDENTIFIED WITH ... AS 'hash')。

  4. 刚创建的用户没有权限:默认只有登录权限,需要后续用 GRANT 授予对数据库的操作权限(下一节介绍)。

  5. 删除用户:使用 DROP USER '用户名'@'主机名';

小结

  • 使用 CREATE USER 创建数据库账户,需指定用户名和允许连接的主机。

  • 可以设置密码、身份验证插件、账户锁定、资源限制等属性。

  • MySQL 8.0 提供了更丰富的密码管理选项,增强安全性。

  • 用户创建后需进一步授权才能操作数据库。


所有评论

关于我 备案号:蜀ICP备2023042032号-1