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

MySQL 網路安全機制深度解析:帳號結構、權限體系與存取控制完整架構

     編輯:MySQL 資料庫相關知識

帳號結構:User + Password + Host

MySQL 帳號由三元組唯一識別:'user'@'host'。相同用戶名、不同 Host 視為不同帳號,權限獨立。

-- 同一用戶,不同來源不同密碼、不同權限
GRANT SELECT ON db1.* TO 'abc'@'server1' IDENTIFIED BY 'pass1';
GRANT SELECT ON db2.* TO 'abc'@'server2' IDENTIFIED BY 'pass2';

此設計允許同一用戶名在不同來源擁有完全隔離的權限與憑證,極大增強靈活性。

三層安全檢查機制

  1. 連線驗證:驗證 User/Host/Password 三元組匹配,失敗即拒絕連線。
  2. 授權檢查:連線成功後,依 mysql.user 全域權限、mysql.db 資料庫級權限、tables_priv/columns_priv 表/欄級權限,判斷操作是否允許。
  3. 存取控制:具體到每個 SQL 語句的操作類型(SELECT/INSERT/UPDATE/DELETE/CREATE/DROP...)是否被授權。

權限體系完整表

權限範圍操作範例
SELECT全域/庫/表/欄SELECT 查詢
INSERT全域/庫/表/欄INSERT 新增
UPDATE全域/庫/表/欄UPDATE 修改
DELETE全域/庫/表/欄DELETE 刪除
INDEX全域/庫/表CREATE/DROP INDEX
ALTER全域/庫/表ALTER TABLE
CREATE全域/庫/表CREATE TABLE/DATABASE
DROP全域/庫/表DROP TABLE/DATABASE
GRANT OPTION全域/庫/表GRANT/REVOKE 授權他人
REFERENCES全域/庫/表/欄建立外鍵約束
CREATE VIEW全域/庫/表CREATE VIEW
SHOW VIEW全域/庫/表SHOW CREATE VIEW
TRIGGER全域/庫/表CREATE TRIGGER
LOCK TABLES全域/庫/表LOCK TABLES

管理級權限(僅全域生效)

權限操作範例風險等級
RELOADFLUSH TABLES/PRIVILEGES/LOGS高
SHUTDOWNmysqladmin shutdown極高
PROCESSSHOW PROCESSLIST, KILL高(可見敏感 SQL)
FILESELECT ... INTO OUTFILE, LOAD DATA INFILE極高(任意檔案讀寫)
SUPERCHANGE MASTER, KILL 任何連線, SET GLOBAL, PURGE BINARY LOGS極高
REPLICATION SLAVE讀取 Master Binlog中
REPLICATION CLIENTSHOW MASTER/SLAVE STATUS低
CREATE USERCREATE/DROP/RENAME USER高

授權表儲存與 SQL 操作

  • 授權資料儲存於 mysql 系統資料庫的 MyISAM 表(user、db、tables_priv、columns_priv、procs_priv、proxies_priv)。
  • 可用標準 SQL 查詢/修改:SELECT * FROM mysql.user WHERE User='abc';
  • GRANT/REVOKE 會自動同步更新授權表並快取到記憶體。
  • FLUSH PRIVILEGES 強制重載快取(通常 GRANT 自動觸發)。

實戰授權範例

-- 建立應用帳號:僅允許特定 IP、特定庫、CRUD 權限
CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'Str0ngP@ss!';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app_user'@'192.168.1.100';
FLUSH PRIVILEGES;

-- 建立唯讀報表帳號
CREATE USER 'report_user'@'192.168.1.200' IDENTIFIED BY 'ReadOnly#2024';
GRANT SELECT ON myapp.* TO 'report_user'@'192.168.1.200';
FLUSH PRIVILEGES;

-- 移除危險預設帳號
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE Host='%';
FLUSH PRIVILEGES;

資料庫級權限與 Host 萬用字元風險

GRANT SELECT ON db1.* TO 'user'@'%'; 允許任意主機連線 → 極高風險。生產環境嚴禁 '%',改用具體 IP 或 CIDR('user'@'192.168.1.%')。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved