PASSWORD_VERIFY_FUNCTIONで新旧パスワードの違いが検出されない

この記事ではPASSWORD_VERIFY_FUNCTIONで新旧パスワードの違いが検出されないケースについて解説します。

 PASSWORD_VERIFY_FUNCTIONとは

PASSWORD_VERIFY_FUNCTIONとはユーザプロファイルで設定できるパラメータファイルの1つです。

PASSWORD_VERIFY_FUNCTIONを設定するとDBユーザのパスワード要件を設定することができます。

パスワード要件は事前定義されているものが使用可能です。

現在推奨されている設定可能なパラメータは以下の2つです。

・ora12c_verify_function

・ora12c_strong_verify_function


 ora12c_verify_functionのパスワード要件

ora12c_verify_functionをPASSWORD_VERIFY_FUNCTIONに設定した場合のパスワード要件は以下の通りです。

・パスワードが8文字以上であり、少なくとも数字が1つと英字が1つ含まれていること。

・パスワードがユーザー名またはユーザー名のスペルを逆にしたものと同一でないこと。

・パスワードがデータベース名と同一でないこと。

・パスワードにoracle (oracle123など)の語が含まれていないこと。

・パスワードに少なくとも1つの特殊文字が含まれていること。

・以前のパスワードとの違いが3文字以上あること。

 ora12c_stig_verify_functionのパスワード要件

ora12c_stig_verify_functionをPASSWORD_VERIFY_FUNCTIONに設定した場合のパスワード要件は以下の通りです。

・パスワードが15文字以上であること。

・パスワードに少なくとも1文字以上の小文字と、1文字以上の大文字が含まれていること。

・パスワードに少なくとも1つの数字が含まれていること。

・パスワードに少なくとも1つの特殊文字が含まれていること。

・以前のパスワードとの違いが8文字以上あること。


 新旧パスワードの違いを検出する方法

上記のようにパスワードを変更する際に新旧のパスワードを比較し、違いがあることをチェックすることがあります。

このチェックはパスワード変更時に新旧のパスワードを入力する場合に発生します。

passwordコマンドや「ALTER USER <ユーザー名> IDENTIFIED BY <NEWPASSWORD> REPLACE <old_password>;」コマンドでパスワードを変更するケースがこれに該当します。

反対に「ALTER USER <ユーザー名> IDENTIFIED BY <NEWPASSWORD>」でパスワードを変更する際は新旧パスワードの違いはチェックされません。

Oracleのパスワードは暗号化されて保存されているため、古いパスワードを入力しない限りそのパスワードを確認することができないためです。

パスワード変更時に新旧パスワードのチェックを行いたい場合は、旧パスワードを入力する方法で行う必要があります。