首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 修改密碼與訪問限制完全指南:六種改密方法與權限最小化實踐

     編輯:MySQL 資料庫相關知識

六大修改密碼方法對比

方法指令/語句需權限特點適用場景
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;

MySQL 8.0 新特性:角色體系

-- 建立角色
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 角色體系實現權限集中管理與審計合規。

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