EXEC sp_password 'sa', null, 'sa';
ALTER LOGIN sa ENABLE;
-- 錯誤 15116,級別 16,狀態 1
-- 密碼有效性驗證失敗。該密碼太短,不符合 Windows 策略要求。
關鍵提示:錯誤訊息提及「Windows 策略」,實為 **SQL Server** 環境 (非 MySQL),但密碼策略原理通用。
CHECK_POLICY (預設 ON) 時,建立/修改登入密碼必須滿足 Windows/域策略。-- 密碼需滿足:≥8字元、大小寫、數字、特殊符號
EXEC sp_password 'sa', 'Uiop_098Mn', 'sa'; -- 舊密碼、新密碼、登入名
ALTER LOGIN sa ENABLE;
適用場景:臨時測試、個人開發環境、已知策略要求的環境。
-- 僅影響該登入,不改變系統策略
ALTER LOGIN sa WITH CHECK_POLICY = OFF;
EXEC sp_password 'sa', 'simple123', 'sa';
ALTER LOGIN sa WITH CHECK_POLICY = ON; -- 完成後建議重新啟用
⚠️ 風險:降低安全基線,審計不合規。生產環境**嚴禁**長期關閉。
# 域控制器 (GPMC.msc) 或本地 (secpol.msc)
# 路徑:電腦配置 → Windows 設定 → 安全性設定 → 帳戶原則 → 密碼原則
# 修改項目:
# 密碼必須符合複雜度要求 → 已停用
# 最小密碼長度 → 0 或 4
# 強制密碼歷史記錄 → 0
# 執行 gpupdate /force 刷新
適用場景:隔離測試環境、舊系統相容、非生產網域。
-- 查看當前策略
SHOW VARIABLES LIKE 'validate_password%';
-- 臨時降低策略等級 (LOW/MEDIUM/STRONG)
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 4;
-- 修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED BY 'short';
-- 恢復策略 (生產環境必做)
SET GLOBAL validate_password.policy = MEDIUM;
SET GLOBAL validate_password.length = 8;
# 1. 停止服務
systemctl stop mysqld
# 2. 跳過授權表啟動
mysqld_safe --skip-grant-tables --skip-networking &
# 3. 無密碼登入重置
mysql -uroot
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
# 4. 正常重啟
mysqladmin -uroot -p shutdown
systemctl start mysqld
| 維度 | 建議 | 工具/驗證 |
|---|---|---|
| 生成 | 使用密碼管理器生成 16+ 字元隨機密碼 | Bitwarden, 1Password, KeePass |
| 儲存 | 嚴禁明文寫在代碼/配置/文檔 | 環境變數、Vault、Sealed Secrets |
| 輪換 | 核心帳號 90 天、一般帳號 180 天 | 自動化腳本 + 通知機制 |
| 審計 | 定期掃描弱密碼、重複密碼、未輪換帳號 | pt-password-strength, 自訂腳本 |
| 最小權限 | 應用使用專用帳號,僅授予必要庫/表權限 | GRANT SELECT, INSERT ON db.* TO 'app'@'%' |
密碼策略驗證失敗本質上是**安全基線執行**的體現。理解策略繼承機制、掌握多種應對手段、建立自動化密碼治理流程,才是從根本上解決此類問題的正確姿勢。