| 方法 | 指令/語句 | 需權限 | 特點 | 適用場景 |
|---|---|---|---|---|
| 1. phpMyAdmin/Web 工具 | UI 操作 user 表 | root / 超級權限 | 直觀、圖形化 | 習慣 Web 管理的 DBA |
| 2. mysqladmin 命令列 | mysqladmin -u root -p oldpwd newpwd |
root / 知舊密碼 | 快速、可腳本化 | 自動化腳本、無法登入 SQL 時 |
| 3. INSERT + FLUSH PRIVILEGES | INSERT INTO mysql.user (Host,User,Password) VALUES ('%','user',PASSWORD('pwd')); FLUSH PRIVILEGES; |
root / INSERT mysql.user | 直接操作授權表 | 批量初始化用戶、遷移權限表 |
| 4. REPLACE + FLUSH PRIVILEGES | REPLACE INTO mysql.user ... |
同 INSERT | 存在則更新、不存在則插入 | 冪等腳本部署 |
| 5. SET PASSWORD | SET PASSWORD FOR 'user'@'%' = PASSWORD('pwd'); |
root / UPDATE mysql.user | 無需 FLUSH、語義清晰 | 日常改密、應用程式調用 |
| 6. GRANT ... IDENTIFIED BY | GRANT USAGE ON *.* TO 'user'@'%' IDENTIFIED BY 'pwd'; |
root / GRANT OPTION | 同時授權、無需 PASSWORD()、自動生效 | 新建用戶並設密碼、權限變更同步 |
PASSWORD():MySQL 內部單向雜湊,**不等同** 應用層 MD5/SHA。8.0 已移除,改用 caching_sha2_password 插件。FLUSH PRIVILEGES:直接 DML 操作授權表後**必須執行**;GRANT/SET PASSWORD 自動生效。mysqladmin 無法清空密碼 (設為空串)。-- 1. 僅允許特定 IP 應用帳號讀寫業務庫
CREATE USER 'app_user'@'10.0.1.%' IDENTIFIED BY 'strong_pwd';
GRANT SELECT, INSERT, UPDATE, DELETE ON `biz_db`.* TO 'app_user'@'10.0.1.%';
-- 2. 唯讀報表帳號 (從庫)
CREATE USER 'ro_user'@'10.0.2.%' IDENTIFIED BY 'ro_pwd';
GRANT SELECT ON `biz_db`.* TO 'ro_user'@'10.0.2.%';
-- 3. 開發/測試帳號 (僅開發庫)
CREATE USER 'dev_user'@'%' IDENTIFIED BY 'dev_pwd';
GRANT ALL PRIVILEGES ON `dev_db`.* TO 'dev_user'@'%';
-- 4. 禁止 root 遠程
DELETE FROM mysql.user WHERE User = 'root' AND Host != 'localhost';
FLUSH PRIVILEGES;
-- 建立角色
CREATE ROLE 'app_read', 'app_write', 'db_admin';
-- 授權給角色
GRANT SELECT ON `biz_db`.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON `biz_db`.* TO 'app_write';
-- 用戶授予角色
CREATE USER 'svc_user'@'10.0.1.%' IDENTIFIED BY 'pwd';
GRANT 'app_read', 'app_write' TO 'svc_user'@'10.0.1.%';
-- 設定預設角色 (登入自動生效)
SET DEFAULT ROLE ALL TO 'svc_user'@'10.0.1.%';
-- 列出所有用戶及權限
SELECT User, Host FROM mysql.user;
SHOW GRANTS FOR 'user'@'host';
-- 找出無用帳號 (超過 90 天未登入)
-- 需啟用 general_log 或審計插件
修改密碼推薦 方法 5 (SET PASSWORD) 或 方法 6 (GRANT IDENTIFIED BY),語義清晰且自動生效。訪問控制核心是「特定 IP + 特定庫 + 最小權限集」,配合 MySQL 8.0 角色體系實現權限集中管理與審計合規。