大/小文字を区別しないパスワード・バージョンを使用しているアカウントがあるかどうかの確認
次の手順を使用して、アップグレードするOracle Databaseに大/小文字を区別しないパスワード・パージョンを使用しているアカウントや構成パラメータがないか、確認します。
デフォルトで、Oracle Database 12cリリース2 (12.2)以降のリリースでは、10G
パスワード・バージョンは生成されることも許可されることもありません。
SQLNET.ALLOWED_LOGON_VERSION_SERVER
を、大/小文字を区別しないバージョンを使用できる許容度の高い認証プロトコルに設定しておらず、かつ、大/小文字を区別しないパスワード・バージョンで認証されるユーザー・アカウントがデータベースでロックされないようにする場合は、該当するアカウントを確認して、それらが大/小文字を区別するパスワード・バージョンを使用していることを確認します。
例2-1 大/小文字を区別しない(10G)バージョンを使用するユーザー・アカウントの検索
管理ユーザーとしてSQL*Plusにログインし、次のSQL問合せを入力します。
SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;
次の結果は、アカウントのパスワード・バージョンを示しています。
USERNAME PASSWORD_VERSIONS
------------------------------ -----------------
JONES 10G 11G 12C
ADAMS 10G 11G
CLARK 10G 11G
PRESTON 11G
BLAKE 10G
この例では、各ユーザー・アカウント・パスワードの使用中のバックグラウンド検証バージョンは異なります。
-
JONES
はOracle Database10G
で作成されましたが、JONES
のパスワードは、SQLNET.ALLOWED_LOGON_VERSION_SERVER
パラメータの設定が8
に設定されたときにOracle Database12C
にリセットされました。その結果、このパスワードのリセットによって3つのバージョンがすべて作成されました。11G
および12C
は大/小文字を区別するパスワードを使用します。 -
ADAMS
およびCLARK
は最初に10G
バージョンで作成され、次に、以前のリリースからインポートされた後に11G
バージョンで作成されました。これらのアカウント・パスワードはその後、非推奨のパラメータSEC_CASE_SENSITIVE_LOGONをTRUEに設定した場合、11G
でリセットされました。 -
BLAKE
のパスワードは10G
バージョンで作成され、パスワードはリセットされませんでした。その結果、ユーザーBLAKEは引き続き10G
パスワード・バージョンを使用し、これは大/小文字を区別しないパスワードを使用します。
ユーザーBLAKE
はアップグレード前には10G
パスワード・バージョンだけを持っています。
SQL> SELECT USERNAME,PASSWORD_VERSIONS FROM DBA_USERS;
USERNAME PASSWORD_VERSIONS
------------------------------ -----------------
BLAKE 10G
パスワードに対する措置をせずにただ、新しいOracle Databaseリリースにアップグレードした場合、そのアカウントにはアクセスできなくなります。アップグレード前に、(SQLNET.ORA
パラメータSQLNET.ALLOWED_LOGON_VERSION_SERVER
を、より許容度の高い認証モードに設定して、)システムが排他モードで構成されないようにする必要があります。
例2-2 大/小文字を区別しないパスワードを持つアカウントの修正
次の手順を実行します。
-
次のSQL問合せを使用して、
10G
パスワード・バージョンだけを持つアカウントを検索します。select USERNAME from DBA_USERS where ( PASSWORD_VERSIONS = '10G ' or PASSWORD_VERSIONS = '10G HTTP ') and USERNAME <> 'ANONYMOUS';
-
SQLNET.ORA
パラメータSQLNET.ALLOWED_LOGON_VERSION_SERVER
の設定を、該当するアカウントに適切なレベルに編集することにより、システムが排他モードで実行されるようにシステムを構成します。次に例を示します。SQLNET.ALLOWED_LOGON_VERSION_SERVER=11
変更後、アップグレードに進みます。
-
アップグレードが終了したら、次のコマンド構文を使用してステップ1で検出したアカウントを期限切れにします。
username
は、ステップ1の問合せで返されたユーザーの名前です。ALTER USER username PASSWORD EXPIRE;
-
パスワードを期限切れにしたユーザーに、ログインするよう依頼します。
-
これらのユーザーがログインするときに、パスワードをリセットするよう、プロンプトが表示されます。システムは
10G
パスワード・バージョンに加えて、欠落している11G
および12C
パスワード・バージョンを内部的に生成します。システムは許容モードで実行中のため、10G
パスワード・バージョンは引き続き存在します。 -
ユーザーが接続しているクライアント・ソフトウェアに
O5L_NP
機能フラグがあることを確認します。ノート:
Oracle Databaseリリース11.2.0.4以降のすべてのクライアント、およびOracle Databaseリリース12.1以降のすべてのクライアントには
O5L_NP
機能があります。他のクライアントではCPUOct2012
パッチを適用してO5L_NP
機能を取得する必要があります。O5L_NP
機能フラグは、『Oracle Database Net Servicesリファレンス』のパラメータSQLNET.ALLOWED_LOGON_VERSION_SERVER
の項に記載されています。 -
すべてのクライアントに
O5L_NP
機能が導入されたら、次のプロシージャを使用してセキュリティを元の排他モードに上げます。-
インスタンス初期化ファイルから
SEC_CASE_SENSITIVE_LOGON
設定を削除するか、SEC_CASE_SENSITIVE_LOGON
インスタンス初期化パラメータをTRUE
に設定します。次に例を示します。SEC_CASE_SENSITIVE_LOGON = TRUE
-
SQLNET.ALLOWED_LOGON_VERSION_SERVER
パラメータをサーバーのSQLNET.ORA
ファイルから削除するか、サーバーのSQLNET.ORA
ファイルのSQLNET.ALLOWED_LOGON_VERSION_SERVER
の値を12
に戻して、排他モードに設定し直します。次に例を示します。SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12
-
-
次のSQL問合せを使用して、まだ
10G
パスワード・バージョンを持っているアカウントを検索します。select USERNAME from DBA_USERS where PASSWORD_VERSIONS like '%10G%' and USERNAME <> 'ANONYMOUS';
-
ステップ8の問合せから戻されたアカウントのリストを使用して、まだ
10G
パスワード・バージョンを持っているすべてのアカウントを期限切れにします。次の構文を使用して、アカウントを期限切れにします。username
は問合せで返されたリストにある名前です。ALTER USER username PASSWORD EXPIRE;
-
期限切れにしたアカウントのユーザーに、アカウントにログインするよう依頼します。
ユーザーはログインするときに、パスワードを再設定するようプロンプトが表示されます。システムは、アカウントの
11G
および12C
パスワード・バージョンだけを内部的に生成します。システムは排他モードで実行されているため、10G
パスワード・バージョンはもう生成されません。 -
ステップ1の問合せを再実行して、システムがセキュア・モードで実行されていることを確認します。どのユーザーも検出されないことを確認します。この問合せでユーザーが検出されない場合、それは、
10G
パスワード・バージョンがシステムにもう残っていないことを意味します。
例2-3 SEC_CASE_SENSITIVE_LOGON SetがFALSEになっているものがないことの確認
SQLNET.ALLOWED_LOGON_VERSION_SERVER
パラメータが12
または12a
に設定されている場合、Oracle DatabaseはSEC_CASE_SENSITIVE_LOGON
のFALSE
設定の使用を妨げません。この設定により、アップグレードされたデータベースのすべてのアカウントがアクセス不能になる可能性があります。
SQL> SHOW PARAMETER SEC_CASE_SENSITIVE_LOGON
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sec_case_sensitive_logon boolean FALSE
SQL> ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = TRUE;
System altered.
ノート:
パラメータSQLNET.ALLOWED_LOGON_VERSION_SERVER
の値が12
よりも許容度の高いバージョン(11
など)に変更されないかぎり、SEC_CASE_SENSITIVE_LOGON
パラメータをFALSEに設定しないでください。