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 连接,但不包括 localhost(localhost 是特殊域名,需要通过 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';
七、注意事项
用户名和主机名要加引号:字符串类型,必须用单引号或双引号包裹。
主机名不要遗漏:'user'@'host' 是一个整体,如果不写 @'host',默认主机名为 '%'。
密码安全:避免在脚本中明文写入密码,可以使用 IDENTIFIED BY PASSWORD 'hashed_string' 直接指定哈希值(PASSWORD 关键字在 MySQL 8.0 中已移除,应使用 IDENTIFIED WITH ... AS 'hash')。
刚创建的用户没有权限:默认只有登录权限,需要后续用 GRANT 授予对数据库的操作权限(下一节介绍)。
删除用户:使用 DROP USER '用户名'@'主机名';。
小结
使用 CREATE USER 创建数据库账户,需指定用户名和允许连接的主机。
可以设置密码、身份验证插件、账户锁定、资源限制等属性。
MySQL 8.0 提供了更丰富的密码管理选项,增强安全性。
用户创建后需进一步授权才能操作数据库。

发表评论
所有评论