MySQL 8创建带密码新用户报错,原5.x语法失效求正确写法
MySQL 8.0 创建用户语法变化及正确操作步骤
没错,MySQL 8.0对用户创建与授权的语法做了明确的拆分调整,你遇到的ERROR 1064就是因为5.x版本的合并语法在8.0中被废弃了。
为什么旧命令失效?
在MySQL 5.x中,GRANT语句可以同时完成用户创建和权限授予两个操作,但从8.0开始,官方将这两个操作拆分成独立步骤——IDENTIFIED BY子句不再允许出现在GRANT语句里,必须通过单独的CREATE USER语句来创建用户,再用GRANT进行授权。这一变化是为了让权限管理逻辑更清晰,同时配合8.0对权限表结构的优化。
MySQL 8.0 创建新用户的正确流程
第一步:创建用户
使用CREATE USER语句创建用户,指定用户名、主机和密码:CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';username是你要创建的用户名localhost表示仅允许本地登录,如果需要远程登录可以替换为'%'(允许所有主机)或者指定具体IPpassword是用户的登录密码
第二步:授予权限
用户创建完成后,再用GRANT语句为其分配权限:GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';ALL PRIVILEGES表示授予所有权限,你也可以根据需求指定具体权限(比如SELECT, INSERT)*.*表示所有数据库的所有表,可替换为具体的库表(比如mydb.*)
(可选)刷新权限
虽然在大多数情况下,8.0会自动加载权限变更,但如果遇到权限不生效的情况,可以执行:FLUSH PRIVILEGES;
验证操作是否成功
- 查看已创建的用户:
SELECT user, host FROM mysql.user; - 查看用户的权限:
SHOW GRANTS FOR 'username'@'localhost';
补充说明
如果你需要创建带特殊需求的用户(比如密码过期策略、权限限制),可以在CREATE USER语句中添加额外参数,例如:
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE INTERVAL 90 DAY;
内容的提问来源于stack exchange,提问作者Akshay Pethani
相关产品推荐
相关产品推荐

