首頁 > 軟體

MySQL8.x使用GRANT為使用者賦權時報錯的解決

2023-11-22 14:01:56

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這個選項表示該使用者可以將自己擁有的許可權授權給別人

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com