※ 本記事は2017年2月20日に公開されたものです。

データベースのアカウントの分類方法はいくつもありますが、どのように利用されることを目的として作成されたかという観点からだと下記の3つに分類できます。

 

  • アプリケーション用のユーザー(人間が使わないアカウント)
  • 直接データベースにログインして利用するユーザー(人間が利用するアカウント)
  • デフォルトで最初から作成されているユーザー(運用フェーズでは誰も利用すべきでなないアカウント)

今回はそれぞれの種類のアカウントにどのようなパスワードプロファイルを適用すべきかを説明します。もちろん、これが唯一無二の方法ではありませんが、セキュリティを担保するためのパスワードプロファイルの作り方の考え方のひとつとして参考にしていただければと思います。

まず、デフォルトで最初から作成されているユーザーには、デフォルトでDEFAULTというユーザープロファイルが適用されています。Oracle Database 11g以降ではデフォルトのパスワードプロファイルが変更されています。もっとも影響のある点はパスワードの有効期限(PASSWORD_LIFE_TIME)が180日に設定されている事だと考えます。つまり、データベース初期状態では6ヶ月後にパスワード変更をアナウンスされ、さらに猶予期間(PASSWORD_GRACE_TIME)の7日間を過ぎるとアカウントが期限切れ(EXPIRED)の状態となり、ログイン時にパスワード変更プロンプトが表示されることにより、アプリケーションからデータベースにログインできない状態になってしまいます。
さまざまなシステムに対してアセスメントを実施していますが、多くのシステムでは導入時にDEFAULTのパスワードプロファイルを変更して、有効期限を無制限にしていました。有効期限を無期限にすることでセキュリティレベルは落ちますが、実運用を考えるとセキュリティリスクが落ちるリスクを受け入れてでもこの変更をおこなう事は仕方がないことかもしれません。ただし、パスワードの有効期限を無期限にするのであれば、簡単に推測できるパスワードを利用しないようにすべきです。複雑なパスワードを強制するために複雑度検証ファンクション(PASSWORD_VERIFY_FUNCTION)の利用も考慮して下さい。
DEFAULTのパスワードプロファイルに対する変更として、失敗許容回数(FAILED_LOGIN_ATTEMPTS)も無制限にしているシステムもありました。ただし、失敗許容回数を無制限にしていると、パスワード推測攻撃を防ぐ事ができませんので、この設定は変更しないべきと考えます。また、攻撃に気付くためにもログイン失敗の監査を取得し、定期的に確認することを推奨します。
デフォルトで最初から作成されているユーザーはパスワードを強固なものにして守る運用よりも、SYS、SYSTEMといったデータベース管理者を含めて、基本的には運用中は利用せず個人アカウントを利用するという匿名性を排除する運用を優先すべきです。 

次に、アプリケーション用のユーザーですが、人間が利用しないプログラムが利用するユーザー用のプロファイルを最低ひとつは作成すべきです。この種類のデータベースユーザーのパスワードは変更する際の影響が多いため、パスワード有効期限を無期限にすることが多いです。またアカウントがロックされてしまうとアプリケーションの動作に影響するため、失敗許容回数も無制限にすることが多いです。ただし、失敗許容回数を無制限にしていると、パスワード推測攻撃を防ぐ事ができませんので、この設定は変更しないべきと考えます。また、攻撃に気付くためにもログイン失敗の監査を取得し、定期的に確認することを推奨します。
また、複雑なパスワードを強制するために複雑度検証ファンクション(PASSWORD_VERIFY_FUNCTION)を利用して下さい。
万が一パスワードが漏えいしてしまった時にパスワードを変更できるようにユーザーのパスワードがどこに設定されているかもきちんと把握しておくことも重要です。

最後は、直接データベースにログインして利用するユーザーです。人間が利用するユーザー用のプロファイルを最低ひとつは作成すべきです。
以前のエントリでも説明しましたが、頻繁なパスワード変更の強制は利用者が複雑なパスワードを思いつかない、覚えられない等の理由で逆に簡単なパスワードや推測されやすいパスワードを設定してしまう可能性がありますので、パスワードの定期的な変更の強制はおこなうとしても頻度は高すぎないようにすべきです。ガイドラインや社内ポリシーなどでパスワードの定期的な変更が必須ではない場合には、アカウントのパスワードは容易に想像できない複雑で、本人以外は知らない状態に保たれている場合には、パスワードの有効期限を設定しないという運用方法も考えられます。もし社内にID管理の仕組みがあれば、その仕組みと連携して、メールや他の社内システムのパスワードとデータベースユーザーのパスワードを同期するとさらに安全に管理できます。
人間が利用するアカウントではパスワード失敗回数によるアカウントロックや複雑度検証ファンクションは有効化しておくべきです。ただし、頻繁なパスワード変更を強制するとパスワードを忘れ、頻繁にロックされてしまい業務に影響がでたり、データベース管理者の運用の手間が増えたりすることも想定できるので注意が必要です。

このブログではユーザーを3種類に分けてそれぞれどのように作成していくべきかを説明していますが、パスワードプロファイルでもこの3種類それぞれに適切にポリシーを設定していくことを推奨します。データベース作成後に手動で作成したユーザーにはそれぞれ適切なプロファイルを設定することで、運用中に不適切なプロファイルが適用されていないか確認することも簡単になります。すべてのユーザーに同一のデフォルトプロファイルを適用するのではなく、適切にプロファイルを作成し、安全なパスワード管理を実施して下さい。

「もくじ」にもどる