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

MySQL 資料庫安全配置指南(二):授權表運作機制、權限實戰與防注入編程規範

     編輯:MySQL 資料庫相關知識

授權表雙階段驗證機制

  1. 連線驗證: 檢查用戶是否允許連線
  2. 請求驗證: 連線成功後,每個請求檢查具體權限(如 SELECT 需 select_priv,DROP 需 drop_priv)

user、db、host 表使用雙階段;tables_priv、columns_priv 僅第二階段。每表含「範圍列」(決定權限生效範圍)與「權限列」(決定具體權限)。

範圍列組合範例

Host + User 組合支援通配符:% 匹配任意字符(含 0 個),_ 匹配單字符。

GRANT/REVOKE 實戰範例

創建本地超級用戶

GRANT ALL PRIVILEGES ON *.* TO test@localhost IDENTIFIED BY 'test' WITH GRANT OPTION;

創建特定子網唯讀用戶

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON test.* 
TO test1@'192.168.1.0/255.255.255.0' IDENTIFIED BY 'test';

GRANT 自動刷新權限,無需手動 FLUSH PRIVILEGES。

直接操作授權表(不推薦)


INSERT INTO user VALUES ("localhost","test",PASSWORD("test"),"Y","Y",...);
FLUSH PRIVILEGES;

撤銷權限並刪除用戶


REVOKE ALL ON test.* FROM test1@'192.168.1.0/255.255.255.0';
DELETE FROM user WHERE user='test1';
FLUSH PRIVILEGES;

編程防注入鐵律:永不信任用戶輸入

  • 數字欄位查詢用引號:WHERE ID='234' 而非 WHERE ID=234(MySQL 自動轉換並去除非數字)
  • 經 mysql_escape_string 處理可杜絕 SQL 注入

各語言防護要點

  • Web 通用: 測試單雙引號、URL 參數編碼、數字欄位嚴格驗證、長度檢查、最小權限原則
  • PHP: addslashes / mysql_escape_string() (PHP 4.0.3+)
  • MySQL C API: mysql_escape_string()
  • MySQL++: escape/quote
  • Perl DBI: quote()
  • Java JDBC: PreparedStatement

實用安全小技巧

  1. 忘記 root 密碼:--skip-grant-tables 跳過驗證修改密碼
  2. --skip-show-database 禁止一般用戶瀏覽其他資料庫
  3. --chroot=path 限制檔案操作範圍,注意 mysql.sock 路徑問題
  4. --log-slow-queries[=file] 記錄慢查詢優化效能
  5. --skip-networking 僅本機使用時禁用 TCP/IP,極大增強安全(強烈推薦)
  6. 更多啟動選項參考手冊 4.16.4
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved