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

Oracle Database 12cR2のアカウント管理機能の新機能である、以下の2つの機能について説明します。

非アクティブなデータベース・ユーザー・アカウントの自動ロック

12cR2から一定期間ログインしていないユーザーを自動的にロックする機能が追加されました。自動的にロックするためにはパスワードプロファイルのINACTIVE_ACCOUNT_TIMEの値を設定します。INACTIVE_ACCOUNT_TIMEのデフォルト値はUNLIMITED(無制限)です。マニュアル上は一部デフォルト値が35(日)との表記もありますが、これはマニュアルの誤記載で正しいデフォルト値はUNLIMITEDです。現在マニュアルの修正を依頼しています。
パスワードプロファイル機能の一つですので、設定値はDBA_PROFILESビューから確認できます。

SQL> select profile, resource_name, limit from dba_profiles where resource_name='INACTIVE_ACCOUNT_TIME';

PROFILE
--------------------------------------------------------------------------------
RESOURCE_NAME
--------------------------------
LIMIT
--------------------------------------------------------------------------------
DEFAULT
INACTIVE_ACCOUNT_TIME
UNLIMITED

ORA_STIG_PROFILE
INACTIVE_ACCOUNT_TIME
35

SAMPLE1
INACTIVE_ACCOUNT_TIME
15

パスワードの有効期限の設定(PASSWORD_LIFE_TIME)では有効期限(と猶予期間)が過ぎた後、アカウントはEXPIREDのステータスとなりますが、正しい古いパスワードでログインすると「ORA-28001: パスワードが期限切れです。」エラーが発生し、新しいパスワードを設定することでデータベースにログインすることはできます。一般的なアプリケーションでは「ORA-28001: パスワードが期限切れです。」エラーが発生した時点でエラーハンドリング処理に入ってしまい、結果としてデータベースにログインできず、アプリケーションとして正常に動作はしませんが、SQL*Plusなどの対話型のクライアントを利用している場合には、古いパスワードを知っていれば新しいパスワードを設定することでデータベースを継続的に利用することは可能です。それに対しINACTIVE_ACCOUNT_TIMEでは、設定期間アカウントが非アクティブであった場合、LOCKのステータスとなり、古いパスワードを知っていてもログインできなくなりますのでより安全です。

なお、12cR1からDBA_USERSビューにユーザーの最終ログイン時間を格納するLAST_LOGIN列が追加されています。また、自動的にロックされた場合、ロックされた日付はLOCK_DATE列に格納されます。

パスワードプロファイルに関しては、第10回「複雑なパスワードの強制 ~ パスワードプロファイル」もご参照ください。

管理ユーザーのパスワード管理強化

Oracle Databaseではパスワード認証を実施する際に一般ユーザーは内部表にパスワードを保持していますが、SYSなどAS SYSDBAキーワードをつけて接続する管理ユーザーのパスワードはデータベース内部の表ではなくパスワードファイルに保持します。12cR1まではパスワードファイルに特別な保護機能はありませんでしたが、12cR2ではパスワードファイルが拡張され管理ユーザーに対してもパスワードポリシーを設定できるようになりました。例えば、管理ユーザーのパスワードの複雑性ルールを設定したり、パスワードの有効期限、非アクティブ時の自動ロック、パスワード認証連続失敗時のアカウントロックなどをSYSユーザーに対しても実施できるようになりました。

SQL> connect sys@remotedb as sysdba
パスワードを入力してください:
ERROR:
ORA-28000: アカウントがロックされています。

なお、ローカルホストでdbaグループに所属しているOSユーザーは、管理ユーザーとして接続する際にパスワード認証よりもOS認証が優先されますので、パスワードにどのような値を入力してもOSで認証されているためSYSユーザーとして接続できますのでご注意ください。

SQL> connect sys/wrong_password as sysdba
接続されました。

12cR2のDBCAで新しくデータベースを作成した場合、管理ユーザーに対するパスワード管理機能は有効になっていません。既存のパスワードファイルのformatパラメータの値は以下のorapwdコマンドで確認できます。

[oracle@catvari dbs]$ orapwd describe file=orapworcl
Password file Description : format=12

また、V$PASSWORDFILE_INFOビューからも確認できます。

SQL> select * from v$passwordfile_info;

FILE_NAME
--------------------------------------------------------------------------------
FORMAT IS_AS     CON_ID
------ ----- ----------
/opt/oracle/product/database/dbs/orapworcl
12     FALSE          0

この機能を利用するためにはパスワードファイルのformatパラメータを12.2に設定する必要があります。format=12.2のパスワードファイルを新しく作り直すこともできますが、既存のパスワードファイルをもとにformat=12.2のパスワードファイルに移行することもできます。移行のためにはorapwdコマンドのinput_fileパラメータを利用します。移行の手順は以下の通りです。

[oracle@catvari dbs]$ orapwd describe file=orapworcl
Password file Description : format=12
[oracle@catvari dbs]$ mv orapworcl orapworcl.org
[oracle@catvari dbs]$ orapwd file=orapworcl input_file=orapworcl.org format=12.2
[oracle@catvari dbs]$ orapwd describe file=orapworcl
Password file Description : format=12.2

なお、formatパラメータのデフォルトは12.2であり、以下のようにformatパラメータを指定しないでorapwdコマンドを実行しても作成されるパスワードファイルはformat=12.2のものとなります。意図せずパスワードポリシーが有効になってしまう可能性がありますのでご注意ください。

[oracle@catvari dbs]$ orapwd file=orapworcl input_file=orapworcl.org
[oracle@catvari dbs]$ orapwd describe file=orapworcl
Password file Description : format=12.2

なお、データベースを起動した状態でパスワードファイルを書き換えただけではパスワードポリシーは有効化されず、何度ログイン失敗してもSYSユーザーはロックされず、パスワードポリシーを有効化するためにはデータベースの再起動が必要でした。

SYSユーザーがロックされてしまった場合には、ローカルホストでdbaグループに所属しているOSユーザーでOS認証を利用して管理者として接続する必要があります。SYSユーザーがロックされたからといってSYSユーザーとして完全にログインできなくなるわけではありません。

管理ユーザーに対するセキュリティレベルを上げる便利な新機能ですが、意図せずSYSユーザーがロックされてしまい業務に影響が出る可能性もありますので注意しつつ安全なデータベース運用を設計してください。

「もくじ」にもどる