7.15.2 ADB_AUDITREAD関数
監査証跡ファイル中の監査証跡を,HADBサーバが検索できる表形式のデータ集合に変換します。
- メモ
-
-
監査証跡機能の概要については,マニュアルHADB システム構築・運用ガイドの監査証跡機能を参照してください。
-
監査証跡を検索するときの運用については,マニュアルHADB システム構築・運用ガイドの監査証跡機能の定期運用を参照してください。
-
- 〈この項の構成〉
(1) 指定形式
ADB_AUDITREAD関数::= 〔MASTER.〕ADB_AUDITREAD(〔監査証跡ファイルのパス名指定〕) 監査証跡ファイルのパス名指定::=マルチ集合値式
(2) 指定形式の説明
- 監査証跡ファイルのパス名指定:
-
ADB_AUDITREAD関数の入力情報となる監査証跡ファイルのパス名を,マルチ集合値式の形式で指定します。マルチ集合値式については,「7.16 マルチ集合値式」を参照してください。
指定規則を次に示します。
-
マルチ集合値式の結果のデータ型は,文字データになるようにしてください。
-
監査証跡ファイルのパス名指定に指定する監査証跡ファイルのパス名は,絶対パスで指定してください。
-
監査証跡ファイルのパス名指定に指定する監査証跡ファイルのパス名は,存在するファイルを指定してください。
[マルチノード機能]
-
マルチノード機能を使用している場合は,監査証跡ファイルのパス名指定は省略できません。
- ■監査証跡ファイルのパス名指定の例
-
例中の下線部分が,監査証跡ファイルのパス名指定です。
なお,ここでは,代表的な指定例を説明しています。監査証跡ファイルのパス名の指定規則については,「(4) 規則」の「(b) 監査証跡ファイルのパス名の指定規則」を参照してください。
- (例1)
-
ADB_AUDITREAD(MULTISET['/audit/adbaud-20170401-123000-159.aud','/audit/adbaud-20170415-123000-952.aud'])
この例の場合,2つの監査証跡ファイルのパス名が指定されています。この2つの監査証跡ファイルがADB_AUDITREAD関数の入力情報になります。
- (例2)
-
ADB_AUDITREAD(MULTISET['/audit/*.aud'])
この例の場合,特殊文字*を使った監査証跡ファイルのパス名が指定されています。この場合,/auditディレクトリ下に格納されている監査証跡ファイル(ファイル拡張子がaudのファイル)が,ADB_AUDITREAD関数の入力情報になります。ただし,現用の監査証跡ファイルは,ADB_AUDITREAD関数の入力情報になりません。
- (例3)
-
ADB_AUDITREAD(MULTISET['/audit1/*.aud','/audit2/*.aud'])
この例の場合,/audit1ディレクトリ下と/audit2ディレクトリ下に格納されている監査証跡ファイルが,ADB_AUDITREAD関数の入力情報になります。
- (例4)
-
ADB_AUDITREAD(MULTISET['/audit/adbaud-201707*.aud','/audit/adbaud-201708*.aud'])
この例の場合,/auditディレクトリ下に格納されている監査証跡ファイルのうち,2017年7月と8月に作成された監査証跡ファイルが,ADB_AUDITREAD関数の入力情報になります。
- 重要
-
監査証跡ファイルのパス名指定に,OSのgzipコマンドで圧縮した監査証跡ファイルを指定することもできます。
(例)
ADB_AUDITREAD(MULTISET['/audit/*.gz'])
この例の場合,/auditディレクトリ下に格納されている監査証跡ファイルを圧縮したファイル(ファイル拡張子がgzのファイル)が,ADB_AUDITREAD関数の入力情報になります。
- ■監査証跡ファイルのパス名指定を省略した場合
-
監査証跡ファイルのパス名指定を省略した場合,監査証跡の出力先ディレクトリ(サーバ定義のadb_audit_log_pathオペランドに指定したディレクトリ)下にある監査証跡ファイルが,ADB_AUDITREAD関数の入力情報になります。ただし,次のファイルは,ADB_AUDITREAD関数の入力情報になりません。
-
現用の監査証跡ファイル
-
監査証跡の出力先ディレクトリのサブディレクトリ下のファイル
(例)
サーバ定義の指定
adb_audit_log_path = /audit
ADB_AUDITREAD関数の指定
ADB_AUDITREAD()
サーバ定義とADB_AUDITREAD関数が上記のように指定されている場合,ADB_AUDITREAD関数の入力情報となる監査証跡ファイルは次のようになります。
- メモ
-
監査証跡ファイルのパス名指定を省略した場合,「サーバ定義のadb_audit_log_pathオペランドの指定値+/*.aud」を,マルチ集合値式の列挙によるマルチ集合値構成子の形式で指定したと見なされます。なお,*は特殊文字の指定となります。
-
-
(3) 実行時に必要な権限
ADB_AUDITREAD関数を実行する場合,監査参照権限が必要になります。
(4) 規則
(a) ADB_AUDITREAD関数に関する規則
-
監査証跡機能が有効なときに,ADB_AUDITREAD関数を使用できます。
-
ADB_AUDITREAD関数が実行されると,監査証跡ファイルのパス名指定に指定した監査証跡ファイル中の監査証跡を,表形式のデータ集合として返却します。ADB_AUDITREAD関数によって返却される表形式のデータ集合の列名,列のデータ型,列に格納される情報については,マニュアルHADB システム構築・運用ガイドの監査証跡を検索するときの表関数導出表の列構成 を参照してください。
-
監査証跡のレコードが存在しない(ヘッダ情報だけがある)監査証跡ファイルを指定した場合,そのファイルに対する表関数導出表の結果は空集合になります。監査証跡のヘッダ情報も存在しない0バイトのファイルを指定した場合は,SQL文がエラーになります。
この規則は,SQL文の前処理時ではなく,SQL文の実行時にチェックされます。
(b) 監査証跡ファイルのパス名の指定規則
-
監査証跡ファイルのパス名指定には,ADB_AUDITREAD関数の入力情報とする監査証跡ファイルのパス名を指定します。監査証跡ファイルのパス名は絶対パスで指定してください。
-
監査証跡ファイルのパス名のファイル名の部分に,次の特殊文字を指定できます。
-
*(アスタリスク)
0文字以上の任意の長さの文字列を意味します。
-
?(疑問符)
任意の1文字を意味します。
- 指定例1:
-
ADB_AUDITREAD(MULTISET['/audit/*.aud'])
上記の例の場合,/auditディレクトリ下の監査証跡ファイル(拡張子がaudのファイル)がADB_AUDITREAD関数の入力情報になります。
- 指定例2:
-
ADB_AUDITREAD(MULTISET['/audit/adbaud-201704*.aud','/audit/adbaud-201705*.aud'])
上記の例の場合,次のような名称の監査証跡ファイルがADB_AUDITREAD関数の入力情報になります。
-
/audit/adbaud-20170401-123000-159.aud
-
/audit/adbaud-20170415-123000-952.aud
-
/audit/adbaud-20170501-123000-599.aud
-
- 重要
-
監査証跡ファイルのファイル名に*または?を指定した場合,その文字は特殊文字として扱われます。監査証跡ファイルのディレクトリ名に,*または?を指定した場合,その文字は通常文字として扱われます。
(例)
ADB_AUDITREAD(MULTISET['/audit*/adbaud-201706*.aud'])
上記の例の場合,ディレクトリ部分の指定は通常文字として扱われるため,ディレクトリ名は/audit*となります。ファイル部分の指定は特殊文字として扱われます。したがって,次の監査証跡ファイルなどが対象のファイルになります。
-
/audit*/adbaud-20170601-123000-159.aud
-
/audit*/adbaud-20170602-165522-656.aud
-
-
-
監査証跡ファイルのパス名に特殊文字を指定した結果,入力情報となる監査証跡ファイルがない場合(監査証跡ファイルのパス名指定の結果が空集合の場合)は,SQL文がエラーになります。
-
監査証跡ファイルのパス名に特殊文字を指定した場合,次の監査証跡ファイルはADB_AUDITREAD関数の入力情報になりません。
-
現用の監査証跡ファイル
-
監査証跡ファイルのパス名に指定したディレクトリのサブディレクトリ下の監査証跡ファイル
-
-
監査証跡ファイルのパス名に特殊文字を指定した結果,入力情報となる監査証跡ファイル数が65,536以上になった場合,SQL文がエラーになります。なお,現用の監査証跡ファイルは,特殊文字を指定したときの対象のファイルにはならないため,カウント対象外になります。
-
次に示す以外のファイルを指定した場合,SQL文がエラーになります。
-
監査証跡ファイル
-
OSのgzipコマンドで圧縮した監査証跡ファイル
この規則は,SQL文の前処理時ではなく,SQL文の実行時にチェックされます。
-
-
監査証跡ファイルのパス名に,現用の監査証跡ファイルは指定できません。
-
監査証跡ファイルのパス名の先頭または最後に空白がある場合,その空白は取り除かれて処理されます。
(例)
'△△△/audit/adbaud-20170420-123030-159.aud' → '/audit/adbaud-20170420-123030-159.aud'
'/audit/adbaud-20170420-123030-159.aud△△△' → '/audit/adbaud-20170420-123030-159.aud'
'△△△/audit/adbaud-20170420-123030-159.aud△△△' → '/audit/adbaud-20170420-123030-159.aud'
'△△△/audit/adbaud-20170420△-123030-159.aud△△△' → '/audit/adbaud-20170420△-123030-159.aud'
△:空白
- 重要
-
監査証跡ファイルのパス名の先頭または最後に空白を指定しないでください。パス名の先頭または最後に空白を指定した場合,上記のように空白が取り除かれるため,意図しないパス名になるおそれがあります。
-
監査証跡ファイルのパス名の長さの上限は1,024バイトです。1,025バイト以上の監査証跡ファイルのパス名を指定すると,SQL文がエラーになります。ただし,パス名の長さの上限チェックは,HADBサーバが次の処理を実行したあとに行われます。
-
監査証跡ファイルのパス名の先頭または最後に空白がある場合,その空白を取り除く処理
-
監査証跡ファイルのパス名に特殊文字が指定されている場合,入力情報となる監査証跡ファイルのパス名に置き換える処理
-
-
CREATE VIEW文中にADB_AUDITREAD関数を指定した場合,監査証跡ファイルのパス名に関する規則のチェックは,CREATE VIEW文の実行時には実施されません。定義したビュー表を指定したSQL文の実行時に,監査証跡ファイルのパス名に関する規則のチェックが実施され,違反している場合はSQL文がエラーになります。
(5) 留意事項
-
監査証跡ファイルの絶対パスに含まれる各ディレクトリに対して,HADB管理者がアクセスできるように読み取り権限と実行権限を設定しておいてください。例えば,監査証跡ファイルが/adbmanager/auditディレクトリ下に格納されている場合,/,/adbmanager,および/adbmanager/auditの各ディレクトリに対して,HADB管理者がアクセスできるように読み取り権限と実行権限を設定しておく必要があります。また,監査証跡ファイルに対して,HADB管理者がアクセスできるように読み取り権限を設定しておいてください。
-
ADB_AUDITREAD関数を指定したSQL文を実行した場合,HADBサーバは監査証跡ファイルのパス名指定に指定された監査証跡ファイルをオープンして,監査証跡を読み込みます。そのため,ADB_AUDITREAD関数を指定したSQL文の実行中は,監査証跡ファイルのパス名指定に指定した監査証跡ファイルを移動したり,削除したりしないでください。
-
監査証跡ファイルのパス名に特殊文字を指定した場合,SQL文の前処理時に,検索対象の監査証跡ファイルのパス名が抽出されます。SQL文の前処理時に抽出された監査証跡ファイルが,SQL文の実行時に存在しない場合,そのファイルは検索対象になりません(SQL文はエラーになりません)。
-
ADB_AUDITREAD関数の指定規則のうち,一部の規則はSQL文の実行時にチェックされます(SQL文の前処理時にはチェックされません)。SQL文の実行時にチェックされる規則には,「この規則は,SQL文の前処理時ではなく,SQL文の実行時にチェックされます。」の1文を記載しています。
(6) 例題
- 例題1
-
2017年4月1日~2017年4月30日の間に,HADBサーバにアクセスしたHADBユーザの一覧を出力します。2017年4月1日~2017年4月30日に出力された監査証跡を格納している監査証跡ファイルを,/auditディレクトリ下に保存しているとします。
SELECT DISTINCT "USER_NAME" FROM TABLE(ADB_AUDITREAD(MULTISET['/audit/*.aud'])) "DT" WHERE "EXEC_TIME" BETWEEN TIMESTAMP'2017/04/01 00:00:00.000000' AND TIMESTAMP'2017/04/30 23:59:59.999999'
下線部分がADB_AUDITREAD関数の指定です。
USER_NAMEにはHADBユーザの認可識別子が格納されています。EXEC_TIMEには,HADBユーザが操作を行った時間が格納されています。
- 例題2
-
2017年4月1日~2017年4月30日の間に,HADBサーバにアクセスしたHADBユーザの一覧を出力します。2017年4月1日~2017年4月30日に出力された監査証跡を格納している監査証跡ファイルを,サーバ定義のadb_audit_log_pathオペランドに指定したディレクトリ下に保存しているとします。
SELECT DISTINCT "USER_NAME" FROM TABLE(ADB_AUDITREAD()) "DT" WHERE "EXEC_TIME" BETWEEN TIMESTAMP'2017/04/01 00:00:00.000000' AND TIMESTAMP'2017/04/30 23:59:59.999999'
下線部分がADB_AUDITREAD関数の指定です。