mysql 資料庫 → user 表root 用戶行Password 欄位選擇 PASSWORD 函數 → 輸入新密碼FLUSH PRIVILEGES;# 修改 root 密碼(需輸入舊密碼)
mysqladmin -u root -p password 'new_password'
# 修改其他用戶密碼
mysqladmin -u username -p password 'new_password'
# ⚠️ 限制:無法將密碼設為空、需連線正常
mysql> INSERT INTO mysql.user (Host, User, Password)
-> VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES;
⚠️ 實際上是新增用戶而非修改既有用戶。
mysql> REPLACE INTO mysql.user (Host, User, Password)
-> VALUES ('%', 'jeffrey', PASSWORD('biscuit'));
mysql> FLUSH PRIVILEGES;
-- MySQL 5.7.6+ 標準語法
SET PASSWORD FOR 'jeffrey'@'%' = 'biscuit'; -- 自動哈希
-- 5.7.6 前舊語法(需 PASSWORD())
SET PASSWORD FOR 'jeffrey'@'%' = PASSWORD('biscuit');
-- 同時授權與設定密碼
GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'biscuit';
-- 僅修改密碼(保留原權限)
GRANT USAGE ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'newpass';
PASSWORD() 已移除,SET PASSWORD 與 GRANT ... IDENTIFIED BY 自動使用 caching_sha2_password 插件SELECT User, Host, plugin FROM mysql.user; 確認認證插件'user'@'localhost' 和 'user'@'%' 需同步修改# systemd 系統
sudo systemctl stop mysqld
# 或傳統方式
sudo killall -TERM mysqld
# 前台執行(另開終端機操作)
sudo mysqld_safe --skip-grant-tables --skip-networking &
# 或 systemd 臨時修改
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"
sudo systemctl start mysqld
mysql -u root # 無需密碼直接進入
-- MySQL 5.7 / 8.0
FLUSH PRIVILEGES; -- 必須先執行(skip-grant-tables 狀態下)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass2024!';
-- 或舊版
UPDATE mysql.user SET authentication_string = PASSWORD('NewPass') WHERE User = 'root';
FLUSH PRIVILEGES;
sudo systemctl stop mysqld
sudo systemctl unset-environment MYSQLD_OPTS # 若用 systemd 臨時修改
sudo systemctl start mysqld
# 驗證
mysql -u root -p'NewStrongPass2024!' -e "SELECT VERSION();"
-- 僅授權特定資料庫
CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON myapp.* TO 'app_user'@'10.0.0.%';
FLUSH PRIVILEGES;
CREATE USER 'readonly'@'%' IDENTIFIED BY 'ReadOnlyPass!';
GRANT SELECT ON *.* TO 'readonly'@'%';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'root'@'localhost';
SHOW GRANTS FOR 'app_user'@'10.0.0.%';
REVOKE ALL PRIVILEGES ON *.* FROM 'old_user'@'%';
DROP USER 'old_user'@'%';
validate_password 元件ALTER USER 'user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;ALTER USER 'user'@'%' ACCOUNT LOCK/UNLOCK;GRANT ... REQUIRE SSL;#!/bin/bash
# rotate_db_password.sh
USER="app_user"
HOST="10.0.0.%"
NEW_PASS=$(openssl rand -base64 32)
mysql -u root -p"$ROOT_PASS" -e "
ALTER USER '$USER'@'$HOST' IDENTIFIED BY '$NEW_PASS';
FLUSH PRIVILEGES;
"
# 更新應用配置(Consul/Vault/環境變數等)
# 重啟應用服務
# 記錄審計日誌
掌握多種修改密碼方式,建立完善用戶權限體系,並準備好忘記密碼的應急預案,是 DBA 的基本功!