MySQL管理員須同時建立內部(檔案系統)與外部(網路授權)雙層防禦。本文系統闡述兩大防禦面向的風險資產、具體配置步驟與授權表架構。
GRANT/SET PASSWORD以**明文**記錄密碼,grep即可竊取。test庫,SELECT *讀取全內容,甚至開放匿名帳號公開洩露。% ls -l DATADIR drwxrwxr-x 2 mysqladm wheel 512 Jan 25 20:40 mysql <-- 群組/他人可讀,危險 drwx------ 2 mysqladm mysqlgrp 512 May 8 18:43 tmp <-- 正確
cd DATADIR# chown -R mysqladm:mysqlgrp .# find . -follow -type d -print | xargs chown mysqladm:mysqlgrp% chmod -R go-rwx .% find . -follow -type d -print | xargs chmod go-rwxmysqladm身分啟動mysqld**drwx------ 2 mysqladm mysqlgrp 512 Jan 25 20:40 mysql drwx------ 2 mysqladm mysqlgrp 1536 May 6 06:11 test drwx------ 2 mysqladm mysqlgrp 1024 May 8 18:43 tmp
| 表 | 範圍欄位 | 權限欄位 | 用途 |
|---|---|---|---|
user | Host, User, Password | 全域權限(含管理權限) | 帳號認證、超級用戶權限 |
db | Host, Db, User | 資料庫級權限 | 特定資料庫存取控制 |
host | Host, Db | 資料庫級權限 | 輔助db表,主機粒度控制 |
tables_priv | Host, Db, User, Table_name | Table_priv (SET) | 表級權限 |
columns_priv | Host, Db, User, Table_name, Column_name | Column_priv (SET) | 欄位級權限 |
tables_priv/columns_priv隨GRANT於3.22.11引入;舊版升級需執行mysql_fix_privilege_tables建立。
user表:全域權限,適用**所有**資料庫,DELETE_PRIV='Y'即可刪除任意表記錄,**極度謹慎授予**。db表:資料庫級,適用該庫**所有表**。host表:不受GRANT/REVOKE影響,配合db表做AND邏輯,可選擇性禁用特定主機權限。tables_priv:表級,適用該表**所有欄位**。columns_priv:欄位級,最細粒度。GRANT/REVOKE管理權限(3.22.11+),降低手動操作錯誤。INSERT授權表。user表全域權限、匿名帳號、FILE/PROCESS/GRANT高危權限持有者。建立「檔案系統鎖定資料目錄 + 授權表精準控制網路存取」的雙層防禦,是MySQL安全運維的基石。