現在地

Oracle Database 12c 以降のパスワード管理で気をつけるべき事例

*以下は、サポート契約締結中のお客様に毎月配信しているサポートレターより一部抜粋して掲載しています。

今号では、12c 以降へアップグレードする際や、パスワードの大/小文字の区別を無効にする際に、起こりうるパスワード関連の問題を取り上げさせていただきます。

下記の状況で、SEC_CASE_SENSITIVE_LOGON パラメータと SQLNET.ALLOWED_LOGON_VERSION_SERVERパラメータの競合により、ORA-01017 が発生し、全てのユーザーがロックアウトされる事象が報告されています。( OS認証でのログオンは可能です。)

パラメータ値

・初期化パラメータ : SEC_CASE_SENSITIVE_LOGON = false
かつ
・sqlnet.ora に設定するパラメータ : SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12

実行結果

$ sqlplus system/ < system ユーザーのパスワード >

ERROR:
ORA-01017: ユーザー名/パスワードが無効です。ログオンは拒否されました。

各パラメータについて見た後に、原因と解決策について述べさせていただきます。

SEC_CASE_SENSITIVE_LOGON

SEC_CASE_SENSITIVE_LOGON パラメータは、データベースにおけるパスワードの大/小文字の区別を有効または無効にするパラメータです。しかし、12.1 より非推奨となっており、下位互換性のために現在残されています。デフォルト値は true です。
アプリケーションで互換性の問題がある場合は、SEC_CASE_SENSITIVE_LOGON パラメータを変更して、パスワードの大/小文字の区別を無効にすることができます。

SQLNET.ALLOWED_LOGON_VERSION_SERVER

Oracle Database インスタンスへの接続時に認められる最小の認証プロトコルを設定します。パラメータ名の VERSION は、Oracle Database のリリースではなく、認証プロトコルのバージョンを指します。また、12cR2 では、SQLNET.ALLOWED_LOGON_VERSION_SERVERパラメータのデフォルト値が 12 となり、その設定では 10G パスワードバージョンが使用されない排他モードとなっております。そのため、12cR2 では通常、パスワードの大/小文 字の区別の無効化はサポートされません。

ユーザーのロックアウトが起こる原因と解決策

SEC_CASE_SENSITIVE_LOGON = false の設定では、11G、12C パスワードバージョンを使用することができません。一方で、SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12 の設定を行っている環境では 10G パスワードバージョンを持つユーザーはログオンすることができ ません。この相反する設定を行うことで、すべてのユーザーが有効な認証方式を持てなくなり、ログオンできない状況に陥ります。

解決策は2つあります。OS認証にてログオンし、以下の①か②のいずれかの方法をお使いください。

  • ① SEC_CASE_SENSITIVE_LOGON = true に設定し、推奨されている認証方式で運用する。
  • ② SEC_CASE_SENSITIVE_LOGON = false で DB を運用する場合は、10G パスワード での認証になりますので、sqlnet.ora の SQLNET.ALLOWED_LOGON_VERSION_SERVER を 11 以下に設定する。加えて、10G パスワードバージョンをユーザーが持っていない場合は、それを作成するために、ALTER USER xxx IDENTIFIED BY yyy; でパスワード変更を行う。

まとめ

12.1.0.2 以降へアップグレードする際や、パスワードの大/小文字の区別を無効にする際に上記のような問題が起こりえます。基本的にパスワードの大/小文字の区別を無効にして運用することは非推奨となっておりますので、アップグレードを行う際や、システムの更改に際しては、パスワードの大/小文字の区別を有効にしての運用へと切り替えていただくことをお勧めいたします。

(オラクル事業部 サポート・サービス担当 高山)