文章摘要
在安装MySQL 8.x时,用户在为新用户赋权时会遇到GRANT命令的语法错误。具体来说,执行以下命令时会报错: ```sqlGRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;``` 错误信息指出,语法有误,建议参考官方文档。问题的根本原因是MySQL 8.x将创建账户和赋予权限的步骤分开了。解决方法包括: 1. **创建账户** 使用`CREATE USER`命令为新用户创建账户,并指定密码。 ```sql CREATE USER '用户名'@'访问主机' IDENTIFIED BY '密码'; ``` 2. **为账户赋权** 使用`GRANT`命令为新账户赋予具体权限。 ```sql GRANT '权限列表' ON '数据库' TO '用户名'@'访问主机'; ``` 3. **为root用户赋予权限** ```sql GRANT ALL ON *.* TO 'root'@'%'; ``` 4. **刷新权限** 调用`FLUSH PRIVILEGES;`刷新权限表。 需要注意的是,MySQL 8.x版本对权限的赋予权限方式进行了优化,但同时也对旧版本的语法进行了调整。通过以上步骤,可以避免语法错误并顺利为用户分配权限。
目录MySQL8.x使用GRANT为用户赋权时报错问题描述原因分析解决方案mysql版本:’for the right syntax to use near ‘identified by ‘password’ with grant option’总结
在安装 MySQL 8.x 的过程中,往往需要为 MySQL 中的一些账户赋予远程访问的权限。
在 MySQL 5.x 的版本中的操作方式
GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
在 MySQL 8.x 中版本中按照以上操作
mysql> GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘123456’ WITH GRANT OPTION;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘IDENTIFIED BY ‘123456’ WITH GRANT OPTION’ at line 1
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘IDENTIFIED BY ‘123456’ WITH GRANT OPTION’ at line 1
通过官网文档的指引可以知道,新版本的 MySQL 8.x 版本已经将创建账户和赋权的方式分开导致以上的命令在 MySQL 8.x 上执行报语法错误。
最终解决方案
# 创建账户
CREATE USER ‘用户名’@’访问主机’ IDENTIFIED BY ‘密码’;
# 为创建的账户赋权
GRANT ‘权限列表’ ON ‘数据库’ TO ‘用户名’@’访问主机’;
GRANT ALL ON *.* TO ‘root’@’%’;
# 刷新
FLUSH PRIVILEGES;
CREATE USER ‘用户名’@’访问主机’ IDENTIFIED BY ‘密码’;
# 为创建的账户赋权
GRANT ‘权限列表’ ON ‘数据库’ TO ‘用户名’@’访问主机’;
GRANT ALL ON *.* TO ‘root’@’%’;
# 刷新
FLUSH PRIVILEGES;
查询mysql具体版本
SELECT @@VERSION
问题分析:
mysql版本8.0.13,在给新用户授权时,发生了变化:
1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘identified by ‘password’ with grant option’ at line 5, Time: 0.000000s
出错的语句:
grant all privileges on *.* to ‘root’@’172.16.10.203′ identified by ?’password’ with grant option
修正后的语句:分开三次执行
#创建账户
create user ‘root’@’172.16.10.203′ identified by ?’password’
#赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
grant all privileges on *.* to ‘root’@’172.16.10.203’ with grant option
#改密码&授权超用户,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;
create user ‘root’@’172.16.10.203′ identified by ?’password’
#赋予权限,with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
grant all privileges on *.* to ‘root’@’172.16.10.203’ with grant option
#改密码&授权超用户,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里
flush privileges;
原因分析:
此版的的mysql版本把将创建账户和赋予权限分开了。
创建账户::create user ‘用户名’@‘访问主机’ identified by ‘密码’;
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@‘访问主机’ ;
with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
赋予权限:grant 权限列表 on 数据库 to ‘用户名’@‘访问主机’ ;
with grant option这个选项表示该用户可以将自己拥有的权限授权给别人
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
您可能感兴趣的文章:MySQL在grant时报错ERROR?1064?(42000)的原因及解决方法解决mysql的赋权操作之GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘123456‘ WITH GRANT OPTION问题详解mysql8.0创建用户授予权限报错解决方法MySQL授权命令grant的使用方法小结
© 版权声明
文章版权归作者所有,未经允许请勿转载。