oracle

パスワードの強化機能を試す (Oracle Database 12c)

パスワードの大文字と小文字

Oracle Database 10g以前、データベース・ユーザーのパスワードは大文字/小文字が区別されませんでした。Oracle Database 11g Release 1以降、Oracle Databaseユーザーのパスワードは大文字と小文字が区別される設定がデフォルトです。
この動作は初期化パラメーターsec_case_sensitive_logonで制御します。パラメーター値をデフォルト値のtrueからfalseに変更すると、パスワードの大文字と小文字を区別しなくなります。

Oracle Database 12cの動作

インスタンス起動時のログ

初期化パラメーターsec_case_sensitive_logonをfalseに設定することは、Oracle Database 12cでは非推奨になりました。このパラメーターをfalseに設定した状態でOracle Database 12c Release 2インスタンスを起動すると、Alert.logに以下のメッセージが出力されます。

Deprecated system parameters with specified values:
  sec_case_sensitive_logon
End of deprecated system parameter listing

Oracle Database 12c Release 2からの動作変更

Oracle Database 12c Release2環境で、初期化パラメーターsec_case_sensitive_logonをfalseに設定する場合にはもう一つの設定が必要です。
必要な設定はデータべス・サーバーのsqlnet.ora ($ORACLE_HOME/network/admin/sqlnet.ora) に、以下の記述を行います。

SQLNET.ALLOWED_LOGON_VERSION_SERVER=11

Oracle Database 12c Release 2では、このパラメーターのデフォルト値は12です。
このパラメーターの設定値を12または12aに指定した状態を「排他モード」と呼び、旧バージョンのパスワード認証を受け付けない状態になります。

初期化パラメーターsec_case_sensitive_logonをfalseに設定し、上記設定を入れない場合、正しいユーザー名/パスワードを指定してもエラー「ORA-01017: invalid username/password; logon denied」が出力されて接続できません。

SQLNET.ALLOWED_LOGON_VERSION_SERVERの設定により、DBA_USERSビューの内容がどのように変化するかを検証しました。

ALLOWED_LOGON_VERSION_SERVER DBA_USERS.PASSWORD_VERSIONS 備考
11 10G 11G 12C
12 11G 12C デフォルト値

上記のように、sqlnet.oraファイルの設定により、CREATE USER文実行時のシステム・ディクショナリが変化します。

下記のマニュアルにはSQLNET.ALLOWED_LOGON_VERSION_SERVERの使用方法が詳しく掲載されています。
https://docs.oracle.com/cd/E82638_01/NETRF/parameters-for-the-sqlnet-ora-file.htm#GUID-1FA9D26C-4D97-4D1C-AB47-1EC234D924AA

JDBC Driverの接続動作にも影響を与えるため、バージョンアップ時には慎重な検討が必要です。