生產環境嚴禁應用程序直接使用 root 賬號連接數據庫。應為每個業務系統創建專用賬號,並按「最小權限原則」授予僅完成業務所需的最小權限集合。
CREATE USER 'app_user'@'10.0.1.%' IDENTIFIED BY 'StrongPass#2024';
關鍵點:Host 字段指定允許連接的客戶端 IP 段,% 為通配符,生產環境建議限制具體網段。
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `business_db`.* TO 'app_user'@'10.0.1.%';
FLUSH PRIVILEGES;
| 業務需求 | SQL 示例 | 說明 |
|---|---|---|
| 只讀報表賬號 | GRANT SELECT ON `report_db`.* TO 'readonly'@'10.0.2.%'; | 僅允許查詢 |
| 特定表寫入權限 | GRANT INSERT, UPDATE ON `order_db`.`orders` TO 'order_svc'@'10.0.3.%'; | 列級控制可用 GRANT UPDATE (status) ON ... |
| 存儲過程執行權限 | GRANT EXECUTE ON PROCEDURE `biz_db`.`sp_calc` TO 'etl_user'@'10.0.4.%'; | 不需表級權限 |
REVOKE ALL PRIVILEGES ON *.* FROM 'app_user'@'10.0.1.%';
GRANT SELECT, INSERT ON `business_db`.`core_table` TO 'app_user'@'10.0.1.%';
DROP USER 'old_user'@'10.0.5.%';
MySQL 權限本質操作的是 mysql 系統庫中的授權表:
user:全局權限、登錄認證db:庫級權限tables_priv、columns_priv:表/列級權限procs_priv:存儲過程/函數權限SHOW GRANTS FOR 'app_user'@'10.0.1.%';
SELECT User, Host FROM mysql.user;
%SELECT * FROM mysql.user WHERE User='root' AND Host!='localhost'; 應為空結果mysql 庫授權表掌握 MySQL 權限系統的分層結構(全局→庫→表→列→存儲過程),配合 GRANT/REVOKE 靈活組合,即可構建安全合規的數據庫訪問控制體系。