萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 用戶權限體系詳解:建立、授權、回收與密碼恢復實戰

一、權限系統核心常識

  1. 權限資訊存於 mysql 資料庫的 grant tables,啟動時載入記憶體。
  2. 用戶標識 = user_name@host_name,同名不同 Host 視為不同用戶。
  3. 兩層驗證:連線密碼驗證 → SQL 語句權限檢查。
  4. 權限變更僅影響新連線,現有會話不受影響。

二、核心權限表

  • user:帳號與全域權限
  • db:資料庫級權限
  • tables_priv:表級權限
  • columns_priv:欄位級權限
  • procs_priv:存儲過程/函數權限
  • proxies_priv:代理用戶權限
  • host:已廢棄

三、用戶帳號命名規則

用戶名@主機,用戶名 ≤16 字元。主機支援:主機名、IP、網段 (192.168.0.0/255.255.0.0)、通配符 (%, 192.168.%.%, %.test.com)。

四、常用權限層級

  • 服務管理:SUPER
  • 庫級:CREATE
  • 表級:DELETE, ALTER
  • 欄位級:INSERT, SELECT, UPDATE

五、核心權限指令

-- 授權
GRANT 權限列表 ON [對象類型] db.表|程序 TO 'user'@'host' [IDENTIFIED BY 'pwd'];

-- 回收
REVOKE 權限列表 ON [對象類型] db.表|程序 FROM 'user'@'host';

-- 查看權限
SHOW GRANTS FOR 'user'@'host';

-- 建立/刪除/重命名用戶
CREATE USER 'user'@'host' [IDENTIFIED BY 'pwd'];
DROP USER 'user'@'host';
RENAME USER old_name TO new_name;

六、實戰範例

-- 查看所有用戶
SELECT user, host, password FROM mysql.user;

-- 授予超級權限
GRANT SUPER ON *.* TO 'mysql'@'localhost';
-- 或
GRANT ALL PRIVILEGES ON *.* TO 'mysql'@'localhost';

-- 回收超級權限
REVOKE SUPER ON *.* FROM 'mysql'@'localhost';

-- 查看特定用戶權限
SHOW GRANTS FOR 'mysql'@'localhost';

七、常見問題處理

1. Root 密碼遺忘恢復

啟動參數加入 --skip-grant-tables --skip-networking,兩種方式:

  • 修改 /etc/init.d/mysql 啟動腳本
  • 或在 my.cnf [mysqld] 區段加入 skip-grant-tables、skip-networking

登入後執行:

UPDATE mysql.user SET PASSWORD=PASSWORD('新密碼') WHERE User='root';
FLUSH PRIVILEGES;

移除參數並重啟服務。

2. 客戶端連線緩慢

關閉 DNS 反向解析:my.cnf 加入 skip-name-resolve。

copyright © 萬盛學電腦網 all rights reserved