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

MySQL GRANT 權限管理完整指南:從基礎授權到五層級精細控制

     編輯:MySQL 綜合教學

GRANT 基礎語法

GRANT privilege_type [, privilege_type] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option ...}]
[WITH with_option ...]

user_specification:
    user [IDENTIFIED BY 'password']
    [PASSWORD EXPIRE | PASSWORD EXPIRE NEVER | PASSWORD EXPIRE INTERVAL N DAY]

with_option:
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count

四大典型角色授權範本

1. 普通資料用戶(CRUD)

GRANT SELECT, INSERT, UPDATE, DELETE ON testdb.* TO 'common_user'@'%' IDENTIFIED BY 'pass123';

2. 開發人員(DDL + 程式碼物件)

GRANT CREATE, ALTER, DROP, INDEX, REFERENCES,
      CREATE TEMPORARY TABLES,
      CREATE VIEW, SHOW VIEW,
      CREATE ROUTINE, ALTER ROUTINE, EXECUTE
ON testdb.* TO 'developer'@'192.168.0.%' IDENTIFIED BY 'dev_pass';

3. 單庫 DBA

GRANT ALL PRIVILEGES ON testdb.* TO 'dba'@'localhost' IDENTIFIED BY 'dba_pass';

4. 超級 DBA(全域)

GRANT ALL ON *.* TO 'root'@'localhost' IDENTIFIED BY 'root_pass' WITH GRANT OPTION;

五大權限作用層級詳解

層級語法範例影響範圍典型用途
全域GRANT SELECT ON *.* TO 'u'@'%';所有資料庫、所有表超級管理員、監控帳號
資料庫GRANT SELECT ON testdb.* TO 'u'@'%';單一資料庫所有表應用帳號、單庫 DBA
資料表GRANT SELECT, INSERT ON testdb.orders TO 'u'@'%';單一表微服務資料隔離、敏感表限制
欄位GRANT SELECT (id, name, email) ON testdb.users TO 'u'@'%';單一表指定欄位GDPR/隱私保護、最小權限原則
程序/函數GRANT EXECUTE ON PROCEDURE testdb.proc TO 'u'@'%';單一存儲程序/函數封裝業務邏輯、防止直接操作表

查看與撤銷權限

-- 查看當前用戶權限
SHOW GRANTS;

-- 查看指定用戶權限
SHOW GRANTS FOR 'dba'@'localhost';

-- 撤銷權限(語法與 GRANT 類似,TO 換 FROM)
REVOKE ALL ON *.* FROM 'dba'@'localhost';
REVOKE SELECT ON testdb.orders FROM 'u'@'%';

關鍵注意事項(避坑指南)

  1. 生效需重連:GRANT/REVOKE 後,用戶必須重新連線才生效。
  2. WITH GRANT OPTION 慎用:允許受權用戶再授權他人,易失控。生產環境建議僅 DBA 持有,統一管理。
  3. proc 表權限陷阱:呼叫存儲程序需 mysql.proc 表 SELECT 權限,單授業務庫不夠。
    GRANT SELECT ON mysql.proc TO 'app'@'%';
    
  4. 五大授權表結構:
    • user:全域權限、連線驗證
    • db:資料庫級權限
    • host:主機級細粒度控制(不受 GRANT/REVOKE 影響,罕用)
    • tables_priv:表級權限
    • columns_priv:欄位級權限
  5. MySQL 8.0+ 推薦用 CREATE USER + GRANT 分離,不再支援 GRANT ... IDENTIFIED BY 隱建用戶。

實戰授權腳本範本

#!/bin/bash
# grant_template.sh
DB="prod_db"
APP_USER="app_user"
APP_PASS="StrongPass2024!"
APP_HOST="10.0.%"

mysql -uroot -p -e "
CREATE USER IF NOT EXISTS '${APP_USER}'@'${APP_HOST}' IDENTIFIED BY '${APP_PASS}';
GRANT SELECT, INSERT, UPDATE, DELETE ON \`${DB}\`.* TO '${APP_USER}'@'${APP_HOST}';
GRANT EXECUTE ON \`${DB}\`.* TO '${APP_USER}'@'${APP_HOST}';
FLUSH PRIVILEGES;
"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved