首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 管理實戰心得:服務啟動、安全加固、用戶權限、GRANT/REVOKE 最佳實踐

     編輯:MySQL 綜合教學

服務啟動與基礎安全

  • Windows: net start mysql / sc start MySQL80
  • Linux: systemctl start mysqld (需 root 或 mysql 權限)
  • 全新安裝後必做三件事:
    1. 刪除匿名用戶:DELETE FROM mysql.user WHERE User='';
    2. 設定 root 強密碼:ALTER USER 'root'@'localhost' IDENTIFIED BY 'StrongPass!23';
    3. 限制 root 登入來源:DELETE FROM mysql.user WHERE User='root' AND Host='%';
  • 修改後 FLUSH PRIVILEGES; 或重啟服務生效

登入命令變體

mysql -uroot -p                    # 互動式輸入密碼
mysql -uroot -p'pass'              # 直接帶密碼 (注意無空格)
mysql dbname -uroot -p             # 直接選擇資料庫
mysql -h 192.168.1.100 -u app -p   # 遠程連線

用戶管理兩大核心方式

方式一:GRANT 命令 (推薦、原子化、自動加密)

-- 全庫全權限 (謹慎使用)
GRANT ALL ON mydb.* TO 'admin'@'%' IDENTIFIED BY 'pass' WITH GRANT OPTION;

-- 僅讀
GRANT SELECT ON mydb.* TO 'readonly'@'%' IDENTIFIED BY 'pass';

-- 讀寫 (無 DDL)
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'rw'@'%' IDENTIFIED BY 'pass';

-- 僅特定表
GRANT UPDATE, DELETE ON mydb.logs TO 'cleaner'@'%' IDENTIFIED BY 'pass';

-- 資源限制 (每小時)
GRANT USAGE ON *.* TO 'limited'@'%' IDENTIFIED BY 'pass'
    WITH MAX_QUERIES_PER_HOUR 1000
         MAX_UPDATES_PER_HOUR 100
         MAX_CONNECTIONS_PER_HOUR 50
         MAX_USER_CONNECTIONS 5;

方式二:直接操作 mysql.user 表 (不推薦、易出錯)

  • 需手動 PASSWORD() 加密
  • 需手動設定 ssl_type, plugin, authentication_string 等欄位
  • 8.0+ 系統表為資料字典,禁止直接 DML

權限體系詳細解析

分類權限說明
全局管理FILE伺服器檔案讀寫 (LOAD DATA INFILE, SELECT ... INTO OUTFILE)
PROCESS查看/殺死其他執行緒 (SHOW PROCESSLIST, KILL)
RELOAD重載權限表、刷新日誌 (FLUSH PRIVILEGES, FLUSH LOGS)
SHUTDOWN關閉伺服器 (mysqladmin shutdown)
庫/表/欄ALTER修改表結構 (增/刪欄位、索引)
CREATE建立庫/表
DELETE刪除記錄
DROP刪除表/庫
INDEX建立/刪除索引
INSERT新增記錄
SELECT查詢記錄
UPDATE修改記錄
特殊ALL該層級所有權限 (相當於 root)
USAGE僅允許登入,無任何操作權限

權限回收與審計

-- 回收特定權限
REVOKE DELETE ON mydb.* FROM 'app'@'%';

-- 回收所有權限 (保留用戶)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'app'@'%';

-- 刪除用戶
DROP USER 'app'@'%';

-- 審計:查看用戶權限
SHOW GRANTS FOR 'app'@'%';
SELECT * FROM mysql.user WHERE User='app';

實戰經驗總結

  1. 應用永不使用 root 連線,建立專用帳號,最小權限原則
  2. 定期審計:SELECT User, Host FROM mysql.user WHERE User='root' AND Host='%'; 應為空
  3. 密碼輪換:配合 validate_password 插件強制複雜度
  4. 連線限制:MAX_USER_CONNECTIONS 防止單用戶佔滿連線池
  5. 審計日誌:啟用 audit_log 插件記錄所有 DDL/DML
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved