您的位置:首页技术文章
文章详情页

MySQL8.x使用GRANT为用户赋权时报错的解决

【字号: 日期:2023-05-05 10:12:03浏览:50作者:猪猪
目录
  • MySQL8.x使用GRANT为用户赋权时报错
    • 问题描述
    • 原因分析
    • 解决方案
  • mysql版本:'for the right syntax to use near 'identified by 'password' with grant option'
    • 总结

      MySQL8.x使用GRANT为用户赋权时报错

      问题描述

      在安装 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

      原因分析

      通过官网文档的指引可以知道,新版本的 MySQL 8.x 版本已经将创建账户和赋权的方式分开导致以上的命令在 MySQL 8.x 上执行报语法错误。

      解决方案

      最终解决方案

      # 创建账户
      CREATE USER "用户名"@"访问主机" IDENTIFIED BY "密码";
      # 为创建的账户赋权
      GRANT "权限列表" ON "数据库" TO "用户名"@"访问主机";
      GRANT ALL ON *.* TO "root"@"%";
      # 刷新
      FLUSH PRIVILEGES;

      mysql版本:'for the right syntax to use near 'identified by 'password' with grant option'

      查询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;

      原因分析:

      此版的的mysql版本把将创建账户和赋予权限分开了。

      创建账户::create user ‘用户名"@‘访问主机" identified by ‘密码";
      赋予权限:grant 权限列表 on 数据库 to ‘用户名"@‘访问主机" ;
      with grant option这个选项表示该用户可以将自己拥有的权限授权给别人

      总结

      以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

      标签: MySQL