首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 權限系統完整指南:用戶、認證、授權與最佳實務

     編輯:MySQL 資料庫相關知識

用戶名與密碼體系

  • MySQL 用戶名獨立於作業系統帳號,最長 16 字元(Unix 通常 8 字元)。
  • 密碼經 PASSWORD() 非可逆加密,與 Unix crypt() 演算法不同。
  • ENCRYPT(str[,salt]) 使用系統 crypt(),不可用時回傳 NULL。

連線參數與安全實務

mysql -h host -u user -p'password'   # -p 後無空格,命令列洩露風險高
# 建議:~/.my.cnf [client] 區段存放憑證,權限 600

權限層級與授權表

層級範圍儲存表
全域所有資料庫mysql.user
資料庫單一資料庫所有表mysql.db、mysql.host
資料表單一表所有欄mysql.tables_priv
欄位單一表單一欄mysql.columns_priv

GRANT / REVOKE 即時生效;手動修改授權表需 FLUSH PRIVILEGES。

初始化與 Root 密碼設定

  1. mysql_install_db 建立預設權限:root@localhost 無密碼、匿名用戶可存取 test_* 資料庫。
  2. 必須立即設定 root 密碼:
    SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_pass');
    或 mysqladmin -u root password 'new_pass'

新增用戶範例

-- 超級用戶 monty,任意主機,含授權權限
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%' IDENTIFIED BY 'pwd' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost' IDENTIFIED BY 'pwd' WITH GRANT OPTION;

-- 管理用戶 admin,本機免密,僅有 reload/process
GRANT RELOAD, PROCESS ON *.* TO 'admin'@'localhost';

-- 佔位用戶 dummy,後續再給資料庫權限
GRANT USAGE ON *.* TO 'dummy'@'localhost';

注意:同時建立 @'%' 與 @'localhost' 避免匿名用戶優先匹配導致無法登入。

高危權限提醒

  • FILE:可讀寫伺服器任意檔案(LOAD DATA INFILE、SELECT ... INTO OUTFILE),僅授信任帳號。
  • GRANT OPTION:允許轉授權限,極謹慎授予。
  • SHUTDOWN、PROCESS、RELOAD:管理權限,僅限 DBA。

權限變更生效機制

  • GRANT/REVOKE/SET PASSWORD:即時生效。
  • 手動 INSERT/UPDATE 授權表:需 FLUSH PRIVILEGES 或 mysqladmin flush-privileges。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved