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

MySQL 資料庫安全解決方案(二):權限體系詳解與高危權限警示

     編輯:MySQL 資料庫相關知識

本系列第二篇,系統梳理 MySQL 權限體系的物件級權限(庫、表、欄、索引)、管理級權限(全域操作),並重點標註高危權限,助你落實最小權限原則。

物件級權限(針對特定資料庫物件)

權限作用對象允許操作
SELECT表/視圖/欄位執行 SELECT 查詢(無此權限僅能做純運算 SELECT 1+1)
INSERT表INSERT、LOAD DATA INFILE(需 FILE 權限配合)
UPDATE表/欄位UPDATE 修改資料
DELETE表DELETE 刪除資料
INDEX表CREATE INDEX、DROP INDEX
ALTER表ALTER TABLE(修改結構、重命名、分區等)
CREATE資料庫/表/索引CREATE DATABASE/TABLE/INDEX
DROP資料庫/表/視圖DROP DATABASE/TABLE/VIEW
GRANT全域/庫/表將自身擁有的權限授予他人(**極高危**)
REFERENCES表/欄位建立外鍵約束引用該欄位

管理級權限(作用於整個 MySQL 伺服器)

權限允許操作風險等級
RELOADFLUSH TABLES/PRIVILEGES/LOGS/STATUS 等⚠️ 中(可刷新權限、日誌)
SHUTDOWNmysqladmin shutdown 關閉伺服器🔴 **極高**(拒絕服務)
PROCESSSHOW PROCESSLIST、KILL 連線/查詢⚠️ 高(可見所有 SQL 文本、可殺慢查詢)
FILELOAD DATA INFILE、SELECT ... INTO OUTFILE 讀寫伺服器檔案系統🔴 **極高**(任意檔案讀寫、可寫 Webshell、讀 /etc/passwd)
SUPERKILL 任意連線、SET GLOBAL 變數、CHANGE MASTER TO、啟用/停用二進制日誌、PURGE BINARY LOGS🔴 **極高**(完全控制伺服器行為、複製拓撲、全域配置)
REPLICATION SLAVE從伺服器連線讀取 Binlog⚠️ 中(僅供複製帳號)
REPLICATION CLIENTSHOW MASTER STATUS、SHOW SLAVE STATUS⚠️ 低
CREATE USERCREATE USER、DROP USER、RENAME USER⚠️ 高(帳號生命週期控制)

高危權限「三不授」原則

  1. 不授 FILE:應用帳號、開發帳號、讀寫分離帳號**嚴禁**。僅備份/匯入專用腳本在受控環境臨時授予。
  2. 不授 SUPER:DBA 專用。應用帳號不需修改全域變數、殺別人查詢、操作複製。
  3. 不授 GRANT:權限管理集中由 DBA/自動化流程執行,應用帳號無授權他人需求。

附帶高危:SHUTDOWN、PROCESS、CREATE USER、ALTER、DROP —— 僅 DBA 核心帳號持有。

帳號分層授權範本

角色典型權限集REQUIRE
應用讀寫帳號SELECT, INSERT, UPDATE, DELETE ON app_db.*REQUIRE SSL
應用唯讀帳號(報表/從庫)SELECT ON app_db.*REQUIRE SSL
開發/測試帳號SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON dev_db.*REQUIRE SSL
備份帳號SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* + FILE(僅備份窗口臨時授)REQUIRE X509 + ISSUER
監控/管理帳號PROCESS, REPLICATION CLIENT, SUPER ON *.*REQUIRE X509 + ISSUER

權限審計常用查詢

-- 列出所有帳號及全域權限
SELECT User, Host, 
  Select_priv, Insert_priv, Update_priv, Delete_priv,
  Super_priv, File_priv, Grant_priv, Shutdown_priv, Process_priv
FROM mysql.user;

-- 檢查匿名帳號、無密碼帳號
SELECT User, Host FROM mysql.user WHERE User = '' OR authentication_string = '';

-- 檢查過寬庫級權限
SELECT User, Host, Db FROM mysql.db WHERE Select_priv='Y' AND Insert_priv='Y' AND Update_priv='Y' AND Delete_priv='Y';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved