| 權限 | 說明 |
| ALL PRIVILEGES | 所有權限(除 GRANT OPTION) |
| CREATE | 建庫、建表、建索引 |
| ALTER | 修改表結構 |
| DROP | 刪庫、刪表、刪視圖 |
| SELECT | 查詢數據 |
| INSERT | 插入數據 |
| UPDATE | 更新數據 |
| DELETE | 刪除數據 |
| INDEX | 建/刪索引 |
| EXECUTE | 執行存儲過程/函數 |
| GRANT OPTION | 授權給其他用戶 |
授權語法範例
-- 特定庫.表授權
GRANT SELECT, INSERT ON mydb.mytable TO 'myuser'@'localhost';
-- 特定庫所有表
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'myuser'@'localhost';
-- 所有庫所有表(僅超級管理員)
GRANT ALL ON *.* TO 'myuser'@'localhost';
-- 僅授予開發常用權限(推薦生產環境)
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, EXECUTE
ON mydb.* TO 'myuser'@'localhost';
5. 驗證授權結果
SHOW GRANTS FOR 'myuser'@'localhost';
輸出示例:
GRANT USAGE ON *.* TO 'myuser'@'localhost'
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, ALTER, INDEX, EXECUTE ON `mydb`.* TO 'myuser'@'localhost'
6. 回收權限
-- 回收特定權限
REVOKE INSERT ON mydb.* FROM 'myuser'@'localhost';
-- 回收所有權限
REVOKE ALL ON *.* FROM 'myuser'@'localhost';
7. 資源限制(防止濫用)
| 限制項 | 說明 |
| MAX_QUERIES_PER_HOUR | 每小時最大查詢次數 |
| MAX_UPDATES_PER_HOUR | 每小時最大更新次數 |
| MAX_CONNECTIONS_PER_HOUR | 每小時最大連接次數 |
| MAX_USER_CONNECTIONS | 同一用戶最大並發連接數 |
設定資源限制
GRANT USAGE ON *.* TO 'myuser'@'localhost'
WITH MAX_QUERIES_PER_HOUR 1000
MAX_CONNECTIONS_PER_HOUR 50
MAX_USER_CONNECTIONS 10;
8. 使變更生效
FLUSH PRIVILEGES;
此命令將權限表緩存刷新至內存,確保修改立即生效。
9. 完整自動化腳本範例
#!/bin/bash
# create_mysql_user.sh
# 用法: ./create_mysql_user.sh username password database [host]
USER=$1
PASS=$2
DB=$3
HOST=${4:-'localhost'}
mysql -u root -p${ROOT_PASS} <
安全建議
- 專用帳號專用庫:每個應用使用獨立帳號,僅授予所需庫權限
- 禁用 root 遠程:
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
- 定期審計:
SELECT User, Host FROM mysql.user; 檢查異常帳號
- 強密碼策略:啟用
validate_password 插件
- 最小權限原則:僅授予業務必要的最小權限集
規範的用戶權限管理能有效降低資料洩露、誤操作與濫用風險,是合規與安全的基礎要求。
- 上一篇文章: Linux 下隱藏 MySQL 命令行密碼的 C 語言實現方案
- 下一篇文章: MySQL 查看數據庫相關信息常用命令大全
Copyright ©
程式碼之家 All Rights Reserved