スマートスタイル TECH BLOG

データベース&クラウド技術情報

MySQL8.0 の新パスワード変数(changed_characters_percentage)についてとポリシーの再確認

はじめに

MySQL 8.0.34 より、validate_passwordコンポーネントにchanged_characters_percentageが導入されました。
Changes in MySQL 8.0.34 (2023-07-18, General Availability) より

本記事では、新しく導入されたchanged_characters_percentageの動作確認をするとともに、これを機会に改めてMySQL8.0 におけるユーザーパスワードポリシーの選定、設定についてまとめていきます。

validate_password コンポーネントのパスワードポリシーについて

MySQL 5.7 までは validate_password プラグインを用いてパスワードの検証を行うことができました。
MySQL 8.0 では、validate_password プラグインが validate_password コンポーネントとして再実装されました。

validate_password コンポーネントでは、パスワードチェックのためのポリシーを 3 レベルで設定します。
validate_password.policy 変数に 数値 012、または対応するシンボリック値 LOWMEDIUMSTRONG を設定します。
それぞれのポリシーに対して実施されるテストについては下の表に示す通りです。

ポリシー 実施されるテスト
0 または LOW 長さ
1 または MEDIUM 長さ、数値、小文字、大文字、および特殊文字
2 または STRONG 長さ、数値、小文字、大文字、および特殊文字、辞書ファイル

長さテストの場合、必要な長さは validate_password.length システム変数で設定します。
他のテストに必要な値も同様に、他の validate_password.xxx 変数(後述)で指定します。

新しく導入された changed_characters_percentage とは?

公式マニュアルにおけるvalidate_password.changed_characters_percentageの紹介(英語)や、リリースノートから、要点を抜粋すると以下になります。

  • 既存のMySQL内のユーザーのパスワードを置き換えようとするときに変更しなければならない最小文字数を、全文字に対する割合(0 から 100)で示す
  • デフォルト値は0。そのためデフォルト設定では現在のパスワードに使用されているすべての文字を新しいパスワードでも使用できる
  • ‘abc’と’ABC’は同じ文字とみなされる
  • 100%に設定された場合は、大文字小文字にかかわらず現在のパスワードのすべての文字が拒否される
  • 設定した基準を満たさない場合、異なる文字数の最小値を示すエラーを報告する
  • REPLACE句を使わないALTER USER文でパスワードを変更する場合は影響しない。
    • 言い換えると、ALTER USER … REPLACE コマンドでパスワードを変更する場合に機能する、ということです。
    • パスワード変更時の ALTER USER コマンドに REPLACE 句を必要とするか(パスワード変更時に現在のパスワードを入力する必要があるか)は、対象アカウントの PASSWORD REQUIRE CURRENT の設定や、対象MySQLサーバーの password_require_current システム変数の設定により異なります。
      詳細については"Password Verification-Required Policy"の公式マニュアル(英語)を参照いただけますと幸いです。

validate_password.changed_characters_percentageの動作確認

ここでは新機能のvalidate_password.changed_characters_percentage がどのように使用できるのか、以下の観点で動作確認をしていきます。

  • どのパスワード変更方法で動作するのか
  • どのパスワードポリシー(validate_password.policy)でも動作するのか

前提

  • MySQL 8.0.35 環境
  • テストユーザー(test@%)を事前作成済み

確認方法

  • rootユーザーでログインし、REPLACE句なしのALTER USER文でテストユーザーのパスワードを変更する

  • テストユーザーでログインし、REPLACE句ありのALTER USER文でパスワードを置き換える

    REPLACE句は、自身のパスワード変更時のみ使用することができるオプションです。

  • rootユーザーでログインし、SET PASSWORD文でテストユーザーのパスワードを変更する

    確認結果

    変更方法 0 または LOW 1 または MEDIUM 2 または STRONG
    REPLACE句なしのALTER USER × × ×
    REPLACE句ありのALTER USER
    SET PASSWORD × × ×

    〇:影響する、×:影響しない

動作確認より、validate_password.changed_characters_percentage はどのパスワードポリシーでも動作することが新たに判明しました。

ここからはパスワードポリシーに指定可能な変数について、改めてまとめてみます。

各パスワードポリシーに関連するvalidate_password.xxx 変数の対照表

新しい validate_password.changed_characters_percentage を加えた、validate_password.xxx 変数とパスワードポリシーの対応を改めてまとめてみました。
各ポリシーにて「〇」が付いているパラメータの設定を検討する必要があります。

パラメータ 0 または LOW 1 または MEDIUM 2 または STRONG
changed_characters_percentage (パスワード内で変更の必要がある文字の割合)
check_user_name (ユーザー名と一致する文字列をパスワード内に使用できるか)
length(パスワードの最小文字数)
mixed_case_count(パスワード内の大文字/小文字の最小数)
number_count(パスワード内の数字の最小数)
special_char_count(パスワード内での英数字以外の最小文字数)
dictionary_file (パスワードチェックで使用する辞書ファイルのパス)

詳細につきましては、MySQL8.0 公式ドキュメント(英語版)にも記載されておりますので併せて参照いただけますと幸いです。
6.4.3.2 Password Validation Options and Variables

まとめ

今回の記事では、MySQL8.0.34 から新しく追加された validate_password.changed_characters_percentage の紹介を兼ねて動作確認を行ってみました。

既存のパスワードと新パスワード間の使用文字の重複を避けられるパラメータのため、「パスワード変更時に必ず異なる文字列に変更しなければならない」等の要件がある環境の場合に有用なのではないでしょうか。

この記事が皆様のお使いの環境のユーザーパスワードポリシーを検討、変更する際の参考になれば幸いです。

Return Top