在 MySQL 中跳過授權表
Mehvish Ashiq
2023年1月30日
2022年5月13日
今天,我們將學習 MySQL 的跳過授權表、授權表,以及當我們鎖定 root 使用者、忘記其密碼或想要恢復完全許可權時如何在 MySQL 中使用 --skip-grant-tables
。
MySQL 系統資料庫中的授權表
MySQL 系統資料庫中的授權表有以下資訊:
user
(全域性許可權、使用者帳戶和其他非特權欄位/列)db
(資料庫級別的許可權)tables_priv
(表級別的特權)columns_priv
(列級別的特權)procs_priv
(函式和儲存過程的特權)proxies_priv
(代理使用者的特權)
每個授權表都由範圍和特權列組成。範圍列標識表中每一行的範圍。
許可權列表示錶行授予的許可權或它允許執行的操作型別。
MySQL 中的 --skip-grant-tables
選項
從 MySQL 8.0.3 開始,--skip-grant-tables
啟用了 --skip-networking
,它自動不允許遠端連線。例如,當 --skip-grant-tables
處於活動狀態時,有關帳戶管理的 SQL 語句 ALTER USER
將被禁用。
我們可以在以下情況下使用 --skip-grant-tables
:
- 我們不小心鎖定了
root
使用者。 - 我們忘記了
root
密碼。 - 我們失去了
root
使用者的所有許可權。
讓我們開始瞭解上述每種情況的解決方案。
當 root
使用者被鎖定時使用 --skip-grant-tables
-
使用 Windows 管理工具停止
services.msc
中的 MySQL 服務。它可以在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools
或通過 Windows 搜尋欄訪問。 -
通過新增以下行來更新名為
my.ini
的配置檔案中[mysqld]
下的SERVER SECTION
:skip-grant-tables
如果你在預設位置安裝了 MySQL,則
my.ini
檔案位於C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
。 -
再次啟動 MySQL 伺服器。這次我們可以不用密碼登入了。
使用 --skip-grant-tables
恢復 MySQL root
使用者的完整許可權
我們可以使用 UPDATE
命令恢復 MySQL root
使用者的完全許可權。
-
首先,我們需要停止
mysqld
。 -
接下來,使用
--skip-grant-table
選項重新啟動它以禁用root
帳戶的登入憑據。 -
此外,僅使用
mysql
再次連線到mysqld
伺服器。這裡我們不使用-p
選項作為密碼,也可能不輸入使用者名稱。 -
在
mysql
客戶端中使用以下命令來獲取 MySQL 中root
使用者的所有許可權。mysql> UPDATE mysql.user SET Grant_priv = 'Y', Super_priv = 'Y' WHERE User = 'root';
我們已經使用
Super_priv = 'Y'
設定了超級許可權。 -
現在,我們必須使用
FLUSH
命令重新整理許可權,如下所示:mysql> FLUSH PRIVILEGES;
請記住,當
--skip-grant-table
處於活動狀態時,MySQL 不會在查詢和連線時檢查授權表,這意味著任何人都可以快速遠端登入並運算元據庫。
在 MySQL 中使用 --skip-grant-tables
重置 root
密碼
在這裡,我們可以使用 mysql
客戶端來重置root
密碼,但這是一種不太安全的方法。要繼續使用此方法,請按照以下步驟操作:
-
停止 MySQL 伺服器並使用
--skip-grant-tables
重新啟動。為什麼我們要關閉伺服器?因為這是一種不安全的方法,並且通過啟用skip_networking
來禁用遠端連線。 -
使用
mysql
客戶端重新連線 MySQL 伺服器。此處不需要密碼。 -
在
mysql
客戶端中,重新載入授權表以使帳戶管理語句正常工作。mysql> FLUSH PRIVILEGES;
-
現在,用你想要的密碼更新
'root'@'localhost'
帳戶的密碼。 -
更新語句以使用該主機名以不同的主機名部分更改
root
帳戶的密碼。mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword';
-
最後,我們可以使用新密碼以
root
使用者身份連線到 MySQL 伺服器。像往常一樣關閉伺服器並重新啟動(沒有--skip-grant-tables
和skip-networking
)。
Author: Mehvish Ashiq