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

MySQL 安全性指南 (二):資料庫/表權限與管理權限詳細解析

     編輯:MySQL 資料庫相關知識

2.1.3 資料庫與表級權限

權限允許操作備註
ALTERALTER TABLE需搭配其他權限 (如 CREATE/INSERT) 才能實際執行變更
CREATE建立資料庫、資料表不含建立索引
DELETE刪除資料列
DROP刪除資料庫、資料表不含刪除索引
INDEX建立/刪除索引
REFERENCES保留 (外鍵參考)目前未啟用
SELECT查詢資料不涉及表的 SELECT (如 SELECT NOW()) 不需此權限
UPDATE修改現有資料列

2.1.4 管理權限 (全域/伺服器級)

權限允許操作風險與建議
FILELOAD DATA INFILE、SELECT ... INTO OUTFILE 讀寫伺服器檔案高風險:可讀 /etc/passwd、寫任意可寫路徑。
**禁用或僅授信任管理帳號**。
啟動 mysqld 勿用 root,限制檔案系統存取範圍。
GRANT將自身權限授予他人 (含 GRANT 權限本身)極高風險,僅限超級管理員
PROCESSSHOW PROCESSLIST、mysqladmin process、KILL 任意執行緒可見所有連線查詢文本 (含敏感 SQL),謹慎授予
RELOADFLUSH *、mysqladmin reload/refresh/flush-*影響伺服器運行狀態,僅限運維帳號
SHUTDOWNmysqladmin shutdown 關閉伺服器拒絕服務風險,極度限制

權限儲存結構

  • user、db、host 表:每個權限對應一個 ENUM('N','Y') 欄位 (如 Select_priv)。
  • tables_priv、columns_priv:權限欄位為 SET 型態 (如 Table_priv = 'Select,Insert,Update')。

授權表範圍欄位 (Scope Columns)

  • user:Host、User、Password
  • db:Host、Db、User
  • host:Host、Db (輔助 db 表做更細主機控制)
  • tables_priv:Host、Db、User、Table_name
  • columns_priv:Host、Db、User、Table_name、Column_name

Server 依據連線來源 IP、用戶名、資料庫、表、欄位層層匹配範圍欄位,合併權限欄位決定最終授權。

實戰授權範例

-- 僅授讀寫特定表
GRANT SELECT, INSERT, UPDATE ON erp.orders TO 'app_user'@'10.0.1.%';

-- 唯讀分析帳號
GRANT SELECT ON dw.* TO 'analyst'@'10.0.2.%';

-- 禁止危險權限
REVOKE FILE, PROCESS, SUPER, SHUTDOWN ON *.* FROM 'app_user'@'%';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved