連線MySQL伺服器時,密碼不以明文傳輸,但其他資訊均為可讀文本。為構建安全的MySQL系統,必須從認證、權限、網路、作業系統層面多維防護。
空密碼帳號允許任意用戶以該身分登入:mysql -u other_user db_name。初始化腳本mysql_install_db建立權限表時,應同步修改所有帳號密碼,或至少修改root密碼:
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';
mysql> FLUSH PRIVILEGES;
mysql系統帳號運行服務。mysql.server啟動腳本以su - mysql切換身分。chmod 600僅root可讀。mysql帳號可讀寫。| 權限 | 風險 | 管控原則 |
|---|---|---|
PROCESS | SHOW PROCESSLIST洩露執行中SQL(含敏感密碼操作) | 僅授予管理帳號;mysqld為PROCESS權限保留額外連線供root緊急登入 |
FILE | LOAD DATA INFILE '/etc/passwd'讀取系統檔;SELECT ... INTO OUTFILE寫入任意檔案 | 嚴禁授予非管理員;啟動參數--secure-file-priv限制匯入匯出目錄 |
GRANT | 權限遞移攻擊:兩帳號互相GRANT擴大權限 | 極少數管理帳號持有 |
ALTER | RENAME TABLE偷梁換柱繞過表級權限 | 謹慎授予 |