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

MySQL 使用者管理全攻略:建立、授權、刪除、修改密碼一站式指南

     編輯:MySQL 綜合教學

MySQL 使用者與權限管理是資料庫運維的基石。本文系統整理從建立使用者、資料庫授權、權限精細控制、刪除使用者、修改密碼到常用查詢指令的完整操作手冊,適用 MySQL 5.7+ 版本,並針對舊版 mysql.user 直接插入的風險提出現代化最佳實踐。

核心原則:拒絕直操作系統表

舊文檔常見做法:INSERT INTO mysql.user ... 直接寫入系統表。
現代風險:MySQL 5.7+ mysql.user 表結構頻繁變更 (新增 authentication_string, plugin 等欄位),直插易導致「使用者建立成功但無法登入」或權限異常。
黃金法則:**永遠使用 CREATE USER、GRANT、ALTER USER 等 SQL 標準指令**,讓伺服器自動維護系統表與權限快取。

一、建立使用者 (現代語法)

-- 登入 root
mysql -u root -p

-- 建立使用者,指定認證插件 (推薦 caching_sha2_password)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongP@ssw0rd!';

-- 或允許本機連線
CREATE USER 'local_user'@'localhost' IDENTIFIED BY 'LocalP@ss!';

關鍵點:
- 'user'@'host' 格式精確控制來源 (IP、網段、%、localhost)。
- MySQL 8.0 預設 caching_sha2_password,舊驅動需指定 mysql_native_password 或升級驅動。

二、建立資料庫與授權

-- 建立資料庫 (指定字元集)
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 授予該資料庫所有權限
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'192.168.1.%';

-- 精細授權範例 (僅讀、寫入)
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'readonly_user'@'%';

-- 立即生效
FLUSH PRIVILEGES;

權限層級說明:
GLOBAL (*.*) > DATABASE (db.*) > TABLE (db.table) > COLUMN > ROUTINE/PROXY。
遵循最小權限原則:業務帳號僅授予所需資料庫的必要操作權限。

三、修改密碼與帳號維護

-- 修改當前使用者密碼 (MySQL 5.7+)
ALTER USER USER() IDENTIFIED BY 'NewStr0ngP@ss!';

-- 管理員修改指定使用者密碼
ALTER USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'NewStr0ngP@ss!';

-- 修改主機/重命名使用者 (MySQL 8.0+)
RENAME USER 'old_user'@'%' TO 'new_user'@'10.0.0.%';

-- 鎖定/解鎖帳號
ALTER USER 'app_user'@'%' ACCOUNT LOCK;
ALTER USER 'app_user'@'%' ACCOUNT UNLOCK;

四、刪除使用者與清理

-- 刪除使用者 (自動撤銷權限)
DROP USER 'app_user'@'192.168.1.%';

-- 刪除資料庫 (謹慎操作)
DROP DATABASE app_db;

五、常用查詢與診斷指令

指令用途
SHOW DATABASES;列出所有資料庫
USE db_name;切換預設資料庫
SHOW TABLES;列出當前資料庫所有表
DESC table_name;顯示表結構 (同 SHOW COLUMNS)
SHOW GRANTS FOR 'user'@'host';檢視使用者實際權限
SELECT User, Host, plugin FROM mysql.user;查看所有使用者與認證插件

避坑指南

  • 權限不生效? 執行 FLUSH PRIVILEGES; 或重新連線。
  • 無法遠端連線? 檢查 bind-address (my.cnf)、防火牆 3306 埠、使用者 Host 欄位是否允許該 IP。
  • 密碼策略報錯? MySQL 5.7+ 預設啟用 validate_password 插件,需符合長度、大小寫、數字、特殊字元要求,或調整 validate_password.policy。
  • 認證插件不匹配? 老版驅動連 MySQL 8.0 報 caching_sha2_password 錯誤,執行:ALTER USER 'user'@'host' IDENTIFIED WITH mysql_native_password BY 'password';。

掌握這套標準化流程,配合自動化腳本 (Ansible/Shell/Python),即可構建安全、可追蹤、易維護的 MySQL 存取控制體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved