MySQL 修改密碼有多種等價路徑,本文梳理六大方法優劣,並說明訪問限制(GRANT 權限矩阵、db 表庫級控制)的精細配置。
| 方法 | 命令/SQL | 特點 | 需 FLUSH PRIVILEGES |
|---|---|---|---|
| 1. phpMyAdmin / GUI | 圖形界面操作 mysql.user 表 | 直觀、適合新手 | 否(工具自動執行) |
| 2. mysqladmin | mysqladmin -u root -p'old' password 'new' | 命令行快捷、腳本友好 | 否 |
| 3. INSERT INTO user | INSERT INTO mysql.user (Host,User,Password) VALUES ('%','app',PASSWORD('pass')); | 本質是創建用戶,兼容極舊版本 | 是 |
| 4. REPLACE INTO user | REPLACE INTO mysql.user (Host,User,Password) VALUES ('%','app',PASSWORD('pass')); | 存在則更新、不存在則插入 | 是 |
| 5. SET PASSWORD | SET PASSWORD FOR 'app'@'%' = PASSWORD('pass'); | 專用語法、無需 FLUSH | 否 |
| 6. GRANT ... IDENTIFIED BY | GRANT USAGE ON *.* TO 'app'@'%' IDENTIFIED BY 'pass'; | 同時授權與設置密碼、無需 FLUSH | 否 |
⚠️ MySQL 5.7.6+ / 8.0 推薦統一使用 ALTER USER 'app'@'%' IDENTIFIED BY 'pass';(自動處理插件、刷新、驗證)。
*... 或 16 位)user 表存儲值user 表時**必須**用 PASSWORD(),否則明文存儲導致無法登錄除 root/admin 外,**所有權限列 = 'N'**。
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER,
CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EXECUTE
ON `biz_db`.* TO 'app_user'@'10.0.0.%';
MySQL 5.0+ 新增權限:CREATE VIEW、SHOW VIEW、CREATE ROUTINE、ALTER ROUTINE、EXECUTE。
極敏感欄位(薪資、身份證)可用列級權限隔離:
GRANT SELECT (id, name, dept) ON `hr_db`.`employee` TO 'hr_ro'@'%';
-- 或
INSERT INTO mysql.columns_priv (Host,Db,User,Table_name,Column_name,Column_priv)
VALUES ('%','hr_db','hr_ro','employee','salary','SELECT');
| Host 值 | 匹配範圍 |
|---|---|
'192.168.1.10' | 單一 IP |
'192.168.1.%' | C 段 |
'192.168.1.0/255.255.255.0' | CIDR |
'%.example.com' | 域名後綴 |
'%' | 任意主機(慎用) |
FLUSH PRIVILEGES;GRANT/REVOKE/ALTER USER/SET PASSWORD:自動刷新,**無需** 手動 FLUSHSHOW GRANTS FOR 'app_user'@'10.0.0.%';掌握六大改密路徑與權限矩阵,能應對從「臨時改密」到「精細授權體系建設」的全谱系需求。