24.3.2 イベント終了時の出力パターン
一つのイベントに対して複数の監査証跡(イベントの対象となるオブジェクト数分の監査証跡)が取得されます。基本的には,監査証跡表の操作対象オブジェクト情報以外の列は,すべて同じ内容を出力します。ただし,ユティリティなど,操作対象ごとにイベントの結果が異なる場合は,終了コードごとに異なる内容を出力します。監査証跡の出力パターンの例を次に示します。
(1) 対象オブジェクト又は対象ユーザが複数の場合
(a) 対象オブジェクトが複数の場合
例えば,SELECT * FROM "T1","T2"と実行した場合,次に示すようにオブジェクトT1とT2に関して2行の監査証跡が出力されます。このとき,終了コードはすべて同じ値が記録されます。
... |
イベントサブタイプ |
... |
オブジェクト名称 |
... |
終了コード |
... |
---|---|---|---|---|---|---|
... |
SEL |
... |
T1 |
... |
XXX |
... |
... |
SEL |
... |
T2 |
... |
XXX |
... |
ルーチンの再作成,スキーマ単位のデータベース再編成ユティリティなどは,オブジェクトによってイベントの成功と失敗に分かれることがあります。その場合は,オブジェクトごとに異なる終了コードを出力します。対象オブジェクトが複数になる場合があるイベントの一覧を次の表に示します。
イベント名称 |
実行単位 |
出力単位の対象 |
出力レコード数 |
SQLコード又は 終了コード |
---|---|---|---|---|
GRANT, REVOKE |
ユーザ |
ユーザ |
対象ユーザ数 |
イベント対象オブジェクトに対してすべて同じ値 |
ロール |
ロール |
対象ロール数 |
||
CREATE CONNECTION SECURITY, DROP CONNECTION SECURITY |
CONNECT関連セキュリティ機能の設定値 |
CONNECT関連セキュリティ機能の設定値 |
CONNECT関連セキュリティ機能の設定値数 |
|
操作系SQL |
実表 |
|
対象実表数 +対象順序数生成子数 |
|
ビュー表 |
|
対象ビュー表数 +対象順序数生成子数 |
||
ALTER ROUTINE, ALTER PROCEDURE, ALTER TRIGGER |
複数のルーチン又はトリガ※1 |
プロシジャ,関数,トリガ |
対象ルーチン数分 |
イベント対象オブジェクトごとに異なる値 |
pdload |
|
|
対象実表数 +対象順序数生成子数 |
|
pdexp, pddefrev |
実表 |
実表 |
対象実表数 |
|
ビュー表 |
ビュー表 |
対象ビュー表数 |
||
ストアドプロシジャ |
ストアドプロシジャ |
対象ストアドプロシジャ数 |
||
トリガ |
トリガ |
対象トリガ数 |
||
pdrorg |
スキーマ※2,実表,インデクス |
実表 |
対象実表数 |
|
ディクショナリ表のメンテナンス(インデクスの追加) |
インデクス |
対象インデクス数 |
||
pdaudbegin, pdaudend |
ユニット |
ユニット |
対象ユニット数 |
- 注※1
-
ルーチン情報が取得できない場合は,オブジェクト情報にNULL値を記録して監査証跡を1行だけ出力します。
- 注※2
-
スキーマ単位の再編成の場合,スキーマ内の表情報が取得できないときは,オブジェクト情報にスキーマ情報を記録して監査証跡を1行だけ出力します。
(b) 副問い合せの場合
例えば,UPDATE "T1" SET "C1" = (SELECT "C1" FROM "T2" WHERE CODE = '01') WHERE CODE = '01'と実行した場合,(a)と同じくアクセスしたオブジェクト情報を出力します。このとき,イベントタイプとサブタイプには,オブジェクトに対するアクションの監査証跡を次に示すように出力します。このとき,各イベント終了時の監査証跡のSQLコードはすべて同じ値が記録されます。
... |
イベントサブタイプ |
... |
オブジェクト名称 |
... |
終了コード |
... |
---|---|---|---|---|---|---|
... |
UPD |
... |
T1 |
... |
XXX |
... |
... |
SEL |
... |
T2 |
... |
XXX |
... |
(2) 内部的に動作するSQLの場合
実行したSQLの延長でほかのSQLが実行されることがあります。イベントを実行したときに,延長で実行されるSQLを監査対象として定義している場合,延長で実行されるSQLの対象オブジェクト又はユーザの情報を取得します。このとき,オブジェクト又はユーザに対するイベントタイプとサブタイプには,延長で実行されたSQLのイベントタイプとサブタイプが記録されます。また,各監査証跡のSQLコードはどのオブジェクトに対してもすべて同じ値が記録されます。
例えば,DROP SCHEMAの延長で表が削除された場合,スキーマの情報とは別に,アクセスしたオブジェクトとして,表などのオブジェクト情報を出力します。削除処理中にエラー終了した場合は,エラーになるまでにアクセスしたオブジェクトとユーザ数分の監査証跡を出力します。
プロシジャやトリガなども,SQLの延長で更に自動的にSQLが実行されます。この場合,延長で実行されるSQLごとにイベント終了の監査証跡を出力します。トリガの場合は,実行者が一時的にトリガ所有者に切り替わるため,イベントの実行者にトリガ所有者が記録されます。プロシジャの場合は,CALL文のイベント終了の監査証跡も出力します。プロシジャがネストしていた場合は,各CALL文に対して,イベント終了の監査証跡を出力します。トリガ及びプロシジャ実行時の監査証跡レコード出力単位の詳細を次の表に示します。
種別 |
イベントの実行者(認可識別子の値) |
監査証跡レコードの出力単位 |
|
---|---|---|---|
トリガ |
ユーザトリガ |
トリガ所有者 |
トリガ内SQL単位 |
システムトリガ(参照制約などの内部トリガ) |
トリガ所有者 |
システムトリガ内SQL単位 |
|
プロシジャ |
プロシジャ実行者 |
プロシジャ内SQL単位+CALL文 |
トリガやプロシジャ内のSQLでエラーが発生した場合,その時点のSQLのイベントの結果,そのトリガの契機となったSQLのイベントの結果,CALL文の結果に同じSQLコードを出力します。トリガ中のエラー発生箇所と監査証跡(SQLコード)の詳細とプロシジャ中のエラー発生箇所と監査証跡(SQLコード)の詳細を次の表に示します。
BEFOREトリガのSQL結果[1] |
トリガ契機のSQL結果 [2] |
AFTERトリガのSQL結果 [3] |
監査証跡(SQLコード)の詳細 |
||
---|---|---|---|---|---|
[1]の監査証跡 |
[2]の監査証跡 |
[3]の監査証跡 |
|||
エラー |
− |
− |
[1]のSQLコード |
[1]のSQLコード |
× |
正常 |
エラー |
− |
[2]のSQLコード |
× |
|
正常 |
エラー |
[3]のSQLコード |
[3]のSQLコード |
||
正常 |
0 |
0 |
0 |
- (凡例)
-
−:該当しません。
×:監査証跡(SQLコード)を出力しません。
表24‒9 プロシジャ中のエラー発生箇所と監査証跡(SQLコード)の詳細 ネストの有無
監査証跡取得対象イベントの詳細
監査証跡(SQLコード)の詳細
[1]
[2]
[3]
[4]
[5]
[1]の監査証跡
[2]の監査証跡
[3]の監査証跡
[4]の監査証跡
[5]の監査証跡
なし
エラー
−
−
−
エラー
[1]のSQLコード
×
×
×
[1]のSQLコード
正常
−
−
−
エラー
0
×
×
×
[5]のSQLコード
正常
0
×
×
×
0
あり
エラー
−
−
−
エラー
[1]のSQLコード
×
×
×
[1]のSQLコード
正常
エラー
エラー
−
エラー
0
[2]のSQLコード
[2]のSQLコード
×
[2]のSQLコード
正常
エラー
−
エラー
0
0
[3]のSQLコード
×
[3]のSQLコード
正常
エラー
エラー
0
0
0
[4]のSQLコード
[4]のSQLコード
正常
エラー
0
0
0
0
[5]のSQLコード
正常
0
0
0
0
0
- (凡例)
-
−:該当しません。
×:監査証跡(SQLコード)を出力しません。
[1]:ネスト前プロシジャ中のSQLの結果
[2]:ネスト後プロシジャ中のSQLの結果
[3]:ネストしているCALL文の結果
[4]:ネスト前プロシジャ中のSQLの結果
[5]:CALL文の結果
(3) 動的SQLの場合
動的SQLの場合は,PREPAREから実行までを一つのSQLとし,その単位でイベント終了の監査証跡を一つ出力します。実行時のイベント終了時の監査証跡出力タイミングは,OPEN,CLOSE,又はEXECUTE完了時です。操作系SQLの種類による動的SQLの流れを次の図に示します。
- 〔説明〕
-
網掛けしているSQLが監査証跡を出力する契機です。ただし,PREPARE,CLOSE,及びOPENの監査証跡は,エラーの発生箇所によって監査証跡の取得方法が異なります。動的SQL実行時のイベント成否による監査証跡の有無を次の表に示します。
表24‒10 動的SQL実行時のイベント成否による監査証跡の有無 SQL結果
取得指定
成功
失敗
両方
PREPARE成功
OPEN(EXECUTE)成功
CLOSE成功
CLOSE(EXECUTE)で出力する
出力しない
CLOSE(EXECUTE)で出力する
CLOSE失敗
出力しない
CLOSE(EXECUTE)で出力する
CLOSE(EXECUTE)で出力する
OPEN(EXECUTE)失敗
出力しない
OPEN(EXECUTE)で出力する
PREPARE失敗
−
出力しない
PREPAREで出力する
EXECUTE IMMEDIATE
EXECUTE IMMEDIATEで出力する
(凡例)−:該当しません。
- 注
-
明示的にCLOSE文を実行しなくても,内部的にCLOSE文を実行してカーソルを閉じる契機で,イベント終了の監査証跡を出力します。契機については,マニュアル「HiRDB SQLリファレンス」のCLOSE文を参照してください。