パスワード管理でOracleデータベースを守るORACLE MASTER Silver DBA講座(12)

ORACLE MASTER資格の中級に位置付けられ、取得すればOracle技術者としてグローバルに認定される「ORACLE MASTER Silver Oracle Database 10g」。例題を利用してポイントを押さえ、確実な合格を目指そう!

» 2007年04月26日 00時00分 公開
[有限会社 G.F.インフィニティ (Project - ∞)]

 前回「PL/SQLを使いこなしてデータベース管理」で、PL/SQLを学びました。今回から2回にわたって、Oracleデータベースのセキュリティについて紹介します。

Oracle Databaseのセキュリティ:パスワード管理

ポイント

 プロファイルを使用したパスワード管理が対象です。そのほかサーバリソース制限など、プロファイルで何ができるかを理解しておきましょう。

パスワード管理

 Oracleサーバでは、プロファイルを使用することで、定期的なパスワード変更を促したりパスワードの複雑さを保証したりできます。サーバリソース制限を行う場合は、RESOURCE_LIMIT初期化パラメータをTRUEにする必要がありますが、パスワード管理ではその必要はありません。

図1 プロファイルの編集画面 図1 プロファイルの編集画面

 プロファイルに指定するパスワード管理用のキーワードには、次のものがあります。

  • パスワードの有効期間に関するもの
有効期間 PASSWORD_LIFE_TIME
パスワードが失効するまでの有効期間(日数)
期限切れ後の猶予日数 PASSWORD_GRACE_TIME
有効期間超過後の猶予期間(日数)。猶予期間も超過するとアカウントはロックされる

 パスワードが失効すると、ログイン時にパスワードの変更を促すプロンプトが表示されます。

 猶予期間中は下記のように、セッションを確立するたびにメッセージが表示されます。

SQL> conn scott/tiger
ERROR:
ORA-28002: the password will expire within 10 days
  • パスワードの履歴に関するもの
再利用に必要な日数 PASSWORD_REUSE_TIME
パスワードを再使用できるようになるまでの期間(日数)
再利用に必要な変更回数 PASSWORD_REUSE_MAX
パスワードを再使用できるようになるまでに必要なパスワードの変更回数

 以前のパスワードを再び使用するには、PASSWORD_REUSE_TIMEとPASSWORD_REUSE_MAXの両方を満たす必要があります。例えばPASSWORD_REUSE_TIMEに30、PASSWORD_REUSE_MAXに3が設定されている場合は、パスワードを3回変更し、かつ1回目の変更から30日経過していれば、最初のパスワードが使用できます。

  • パスワードの複雑さに関するもの
複雑なパスワード検証のための関数 PASSWORD_VERIFY_FUNCTION
パスワード変更時に、パスワードの複雑さをチェックするファンクション

 パスワードの検証ファンクションはSYSユーザーが所有し、TRUEまたはFALSEを戻す必要があります。$ORACLE_HOME/rdbms/admin/utlpwdmg.sqlを使用すると、デフォルトのパスワード検証ファンクションを作成し、DEFAULTプロファイルに設定することができます。デフォルトのパスワード検証ファンクションでは、パスワードに対して次の検証が行われます。

  • 4文字以上であること
  • ユーザー名と異なること
  • アルファベット、数字、特殊文字がそれぞれ1文字以上使用されていること
  • 前回のパスワードから3文字以上変更されていること
SQL> ALTER USER scott IDENTIFIED BY scott REPLACE tiger;
ALTER USER scott IDENTIFIED BY scott REPLACE tiger
*
行1でエラーが発生しました。:
ORA-28003: 指定されたパスワードのパスワード照合に失敗しました。
ORA-20001: Password same as or similar to user

 上記は、ユーザー名と同じパスワードに変更しようとしてエラーになった例です。

 ALTER USER権限を持たないユーザーでも自分のパスワードは変更可能ですが、パスワード検証ファンクションが有効になっている場合、REPLACE句にて古いパスワードを指定する必要があります。

  • ログインの失敗に関するもの
ロックされるまでのログイン試行失敗回数 FAILED_LOGIN_ATTEMPTS
アカウントがロックされるまでのログイン失敗回数
指定回数失敗後、ロックされる日数 PASSWORD_LOCK_TIME
ログイン失敗回数を超過後のアカウントがロックされた状態になる期間(日数)

 アカウントがロックされると、セッションを確立することはできません。アカウントロックは、PASSWORD_LOCK_TIMEを経過後に解除されますが、ALTER USER ... ACCOUNT UNLOCKコマンドを使用して解除することもできます。

問題

問題1

ユーザーを作成後、パスワードをすぐに変更させ、パスワードには数値を1文字、アンダーバーを1文字含めるために設定する機能を2つ選択しなさい。

a.デフォルトパスワード
b.プロファイル
c.期限切れパスワード
d.パスワード検証ロール

正解:b、c

解説

 前回、宿題とした問題です。

 ユーザーのパスワードをユーザー自身に変更させるためには、期限切れパスワードを使用します(正解c)。

SQL> ALTER USER ユーザー名 PASSWORD EXPIRE;

 これにより、ユーザーがSQL*Plusを使用して次回ログインを試みたとき、パスワードを変更しなければログインできなくなります。

 また、パスワードに数値や記号を必ず含めさせるなど複雑さを検証する場合は、パスワード検証ファンクションを作成し、プロファイルにてそのファンクションを利用します(正解b)。パスワード検証ファンクションを含むプロファイルをユーザーに割り当てることで、パスワードの変更時にチェック機能が働くようになります。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a:Oracleサーバには、デフォルトパスワードというものは存在しません。データベース認証を使用する場合は、必ず明示的にパスワードを使用する必要があります。

選択肢d:パスワードを検証するには、ファンクションを使用します。ロールで検証するという機能はありません。

問題2

次のようなパスワード検証が必要になりました。

  • 最小パスワードは4文字
  • 少なくとも1つのアルファベット、1つの数字、1つの特殊文字が必要
  • ユーザー名と同じパスワードは不可

この設定を行う方法を選択しなさい。

a.ユーザーを作成時にパスワード検証プロシージャを実行する
b.ユーザーにパスワード検証ロールを付与する
c.プロファイルにてパスワード検証ファンクションを設定する
d.プロファイルにてパスワード制限プロシージャを設定する

正解:c

解説

 パスワードを検証するためには、パスワード検証ファンクションを作成し、そのファンクションをプロファイルに設定します(正解c)。

 ファンクションの作成にはルールがあるため、通常は$ORACLE_HOME/rdbms/admin/utlpwdmg.sqlをそのまま、もしくはカスタマイズして使用します。

 そのほかの選択肢にあるような、パスワード検証のプロシージャやロールは存在しません。

問題3

プロファイルを使用して設定できる機能を2つ選択しなさい。

a.特定のユーザーのオブジェクトへの問い合わせを行えるようにする
b.同じユーザー名のセッション数を制限する
c.データベースがオープンしていなくてもセッションが確立できるようにする
d.一定回数ログインに失敗したらアカウントをロックする

正解:b、d

解説

 プロファイルを使用したパスワード検証では、次の機能が提供されます。

  • アカウントのロック正解d
    アカウントがロックされるまでのログイン失敗回数(FAILED_LOGIN_ATTEMPTS)を設定すると、指定回数以上連続でログイン失敗が起こった場合にアカウントがロックされます。ロックされる期間(PASSWORD_LOCK_TIME)を超過するまで、そのアカウントでログインすることはできません。
  • パスワードの有効期間と猶予期間
    パスワードに有効期間(PASSWORD_LIFE_TIME)を設定すると、期限が切れたパスワードには変更が必要となります。有効期間を超過した後、猶予期間(PASSWORD_GRACE_TIME)を超えるまでは古いパスワードでも接続を許可します。
  • パスワード履歴
    再利用に必要な日数(PASSWORD_REUSE_TIME)と再利用に必要な変更回数(PASSWORD_REUSE_MAX)を満たすまで、以前のパスワードを再利用することができなくなります。
  • パスワードの検証
    パスワード検証ファンクション(PASSWORD_VERIFY_FUNCTION)を使用して、設定の際にパスワードをチェックすることができます。

 また、正解bのように、プロファイルを使用してセッション数を制限するといったリソース制限を行うことができます。プロファイルを使用したリソース制限に関しては、「第6回 Oracleユーザーを作成してみよう」を参照してください。

 そのほかの選択肢の不正解の理由は次のとおりです。

選択肢a:オブジェクトへのアクセスを管理するのは権限です。通常はオブジェクト権限を使用しますが、システム権限やロールを使用して管理することもできます。

選択肢c:データベースがオープンしていなくても接続できるようにするには、SYSOPER権限かSYSDBA権限が必要です。

宿題

 次回は、「Oracle Databaseのセキュリティ:監査」を確認します。次の宿題を解いておいてください。

問題

次の初期化パラメータが設定されているときの動作を選択しなさい。

REMOTE_OS_AUTHENT=TRUE

a.リモートクライアントからのOS認証は拒否する
b.リモートクライアントからのOracleデータベースへの接続でOS認証が使用される
c.リモートクライアントに対し、OS認証で接続できる
d.リモートシステムのオペレーティングシステムの変更が許可される

IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、「Silver DBA(Oracle10g)」をはじめOracle関連の資格をテーマとして取り上げています。「無料お試し版」もありますので、記事と併せてご覧ください。



Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。