type
status
date
slug
summary
tags
category
icon
password

Password Verification-Required Policy

MySQL 8.0.13 開始,可以設定在修改密碼時需要一併提供舊密碼。
可透過以下 2 種方式設定 -
  1. 全域系統變數 password_require_current 預設值為 OFF ,可以透過調整為 ON 要求修改密碼時提供就密碼。
  1. CREATE 或 ALTER USER 時加上 PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL] 設定。
    1. PASSWORD REQUIRE CURRENT:密碼更改必須指定當前密碼。
      PASSWORD REQUIRE CURRENT OPTIONAL:密碼更改不強迫指定當前密碼。
      PASSWORD REQUIRE CURRENT DEFAUT:依照全域系統變數 password_require_current 設定。
💡
NOTE:當 USER 具有 global create user 權限或者是在 mysql database 具有 update 權限時,則不受任何限制,意即不需要提供舊密碼。

參考

雙密碼功能 (Dual Passwords)

MySQL 8.0.14 開始在帳戶管理新增了 2 個子句,用來提供雙密碼的功能,這樣就可以分階段且不需各單位配合也不需要停機的況下更換密碼。

RETAIN CURRENT PASSWORD

  • 將 user 當前(舊)密碼替換為第二(secondary)密碼,新的密碼則會成為主(primary)密碼。
    • 新舊密碼為空時,無法指定 RETAIN CURRENT PASSWORD。
      • 當 user 已有第二(secondary)密碼時,在未指定 RETAIN CURRENT PASSWORD 的情況下更改主(primary)密碼,第二(secondary)密碼會維持不變。
        • 當更改身分驗證插件時,無法指定 RETAIN CURRENT PASSWORD,並且會將第二(secondary)密碼丟棄。

        DISCARD OLD PASSWORD

        刪除第二(secondary)密碼。

        參考

        生成隨機密碼(Random Password Generation)

        MySQL 8.0.18 開始在設定密碼的時候可以使用 RANDOM PASSWORD 來為 USER 生成隨機密碼。
        生成的密碼長度由系統變數 generated_random_password_length 決定,預設值為 20。

        參考

        登入失敗追蹤和帳號暫時鎖定(Failed-Login Tracking and Temporary Account Locking)

        MySQL 8.0.19 開始,可以設定當該帳號連續輸入錯誤的密碼時,暫時將帳號鎖定。
        • FAILED_LOGIN_ATTEMPTS N:表示當連續輸入 N 次錯誤密碼時,將會觸發鎖定。
        • PASSWORD_LOCK_TIME {N | UNBOUNDED}:表示要鎖定 N 天,其中 UNBOUNDED 表示永久鎖定直到被解鎖。
        以上 N 的允許值為 0~32767,其中 0 表示禁用,預設值皆為 0。只有當兩個 N 都不為 0 ,才能使用到此功能。
        以下方式可以重置計數並解鎖所有帳號:
        • 重啟 server
        • 執行 FLUSH PRIVILEGES
        以下狀況會重置計數或解鎖個別帳號:
        • 成功登入
        • 持續鎖定的時間已過
        • 使用 ALTER USER 變更鎖定設定,或者是使用 ACCOUNT UNLOCK 語句。

          參考