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。
mysql_install_db 建立預設權限:root@localhost 無密碼、匿名用戶可存取 test_* 資料庫。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。