ユーザーに対しての監査証跡(audit trail)設定方法について

このQ&Aのポイント
  • 特定のユーザーに対して、全てのテーブルへの全ての操作を監査証跡として残す方法を調べた
  • AUDIT文で一括設定する方法は見つからず、個別に設定する必要があるかどうかを調べた
  • 「audit all」コマンドについても情報がほとんどなく、理解に困っている
回答を見る
  • ベストアンサー

ユーザーに対しての監査証跡(audit trail)設定方法について

(バージョン)oracle9i R2 ある特定のユーザーに対して、全てのテーブルへの全ての操作を監査証跡として残したいです。 書籍やネットで調べた限りでは、1回のAUDIT文で実行する方法は見つかりませんでした。できないのでしょうか? (全てのスキーマの全てのテーブルに個別設定が必要なのでしょうか?) また、「audit all」という書き方をネットで発見し、全ての操作に対しての監査が対象になると思っていたのですが、 「SELECT TABLEやINSERT TABLEなどの監査オプションは含まれません」という補足が書かれていました。 この「audit all」コマンドについてもネットで調べたのですが、情報がほとんど無く、理解できていません。 有識者の方、ご教授頂けないでしょうか。 宜しくお願いします。

  • Oracle
  • 回答数2
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.2

Oracle9iR2のSQLマニュアルをもう一度ご覧になれば「ALLは、表12-1 の すべての文オプションを監査しますが、表12-2 の追加文オプションを 監査しません。」と書かれています。上の2表から、監査すべきことを 選んでAUDIT文を書くことになります。

その他の回答 (1)

  • ishi7474
  • ベストアンサー率32% (71/216)
回答No.1

OracleのSQLマニュアルに全て書かれています。

tosshi_1978
質問者

お礼

回答ありがとうございます。 マニュアルを見ましたが答えは出ませんでした。 「audit all」は 順序(index)に対する監査なのでしょうか? 「ある特定のユーザーに対して、全てのテーブルへの全ての操作を監査証跡として残したいです。」が目的です。 その後の調査でsysユーザーに関しての監査は「audit_sys_operations」初期化パラメータの変更で可能である事がわかりました。 他の一般ユーザーに対しての監査方法が知りたいです。 ご存知であればご教授下さい。 よろしくお願いします。

関連するQ&A

  • AUDIT TABLE

    AUDIT TABLEは特定のテーブルに対する監査ではなく、全部のテーブルに対する特定の処理(DDL)を監査するものだという記述を見ました。 しかし、別のところで AUDIT TABLE ON <テーブル名> というSQL文の例を見ました。 これだと特定のテーブルに対する監査になると思うのですが、このSQLはそういう解釈で正しいのでしょうか? また、特定のテーブルに対するすべての操作の監査をするには AUDIT SELECT,INSERT,UPDATE,DELETE,LOCK ON <Schema>.<Object> BY ACCESS; だけではDROPやCREATEが監査できないので不十分でAUDIT TABLEと組み合わせないと無理ということになるのでしょうか? 出展が明記できてなくて申し訳ありません。個人的なblog等ではないので執筆者に問い合わせるなどはできないようです。

  • audit fileの監査ログについて教えてください

    Oracleの初期パラメータでaudit_tail=OSにしています。 DBにアクセスしてSQL文を実行した場合の監査ログについてですが、 sysoperでDBにアクセスした時ですが、 select文を実行したときでもログがなかったり、一つだったり、2つだったり、 また二つの場合でもnormal userタイプだったり、sysdbaタイプだったりします。 詳しく例を挙げますと、下記4つのselect文を実行した結果です。 select 1 from dual; 結果:sysdbaタイプの1レコード select * from system.help;(データ取得できました)  結果:sysdbaタイプ1レコードの時もあれば、sysdba,normal2レコードの場合もありました。 select * from scott.bonus;(実在しますが、「ORA-00942: 表またはビューが存在しません。」エラーがでました)  結果:normalタイプ1レコード select * from iplocks.test;(実在しますが、「ORA-00942: 表またはビューが存在しません。」エラーがでました)  結果:レコードなし これにはなんらかのルールがあるようですが、どんなルールがあるか知りたいのです。 このレコードを読み込んで、どのユーザがどんなアクションをしたか監視していますが、 ログがないと困ります。一つのアクションで二つのログが出ても困ります。 どなたか知恵をお借りくださいますよう、よろしくお願いします。

  • oracle 10g ユーザやスキーマごとに文字コード指定

    oracle 10g ユーザやスキーマごとに文字コード指定 oracle10g使っています sjis sjistilde euctilde eucjptilde など いろいろ文字コードがあります 文字コードごとに それぞれインスタンスを別に しているのですが 1個のインスタンスに統一したいです ユーザやスキーマやテーブルなどで個別に文字コードを指定することは できないのでしょうか

  • ASP.NET で オラクルテーブルのレコード数を変数に入れるには?

    Visual.basic.net で ASP.NETをやってます。 オラクル上のテーブルのレコード件数を取得して 変数に入れたいと思ってます。 記述方法を知ってる方いませんか? オラクルサーバ ORA_SERV スキーマ    SUKIMA10 パスワード   PWD10 テーブル名 TABLE10

  • SELECT文の二段重ね

    次のSQL文を実行します。 create table1 (id, english) insert table1 (1,"foo") insert table1 (2,"bar") create table2 (id, japanese) insert table2 (1, "ふー") insert table2 (2, "ばー") SQL文法としては誤ってますが、成功したとします。 いま、select id from table1 where english = 'foo'; で1が得られます。 いま、select japanese from table2 where id = 1; で"ふー"が得られます。 これを一つのSQLite3のselect文で実現できないでしょうか。 select japanese from table2 where id = (select id from table1 where english = 'foo'); で良いですか? カテゴリ選択にSQLiteが無いのは、人気が無いからですかね。

  • AUDIT_TRAIL(監査設定)の設定方法について教えて下さい

    データベースの監査証跡表(スキームSYS.AUD$表)に監査レコードが格納されるように、AUDIT_TRAILパラメータを変更したいのですが、方法がわかりません。参考URLを見る限り、設定値をDBするようですが、どこの値をDBに設定すれば良いのかわかりません。 宜しくお願いします。 参考URL http://www.atmarkit.co.jp/fsecurity/rensai/dbsec05/dbsec01.html

  • オラクルでデータベースに項目を追加する場合に

    オラクル初心者です教えてください。 バージョンが関係あるのかは分かりませんが、8.1.7です。 AAAテーブルに10個の項目があり、真中に項目を追加する場合に、今入っているデータを生かしたい場合にどうやってやればよいのでしょうか? ↓領域を増やす場合などはこうやっているのですが  項目がずれているので駄目ですよね? CREATE TABLE BBB AS SELECT * FROM AAA DROP TABLE AAA CREATE TABLE AAA(真ん中に項目追加後) INSERT INTO AAA SELECT * FROM BBB やっぱりINSERT分に項目を全部書かないとだめなのでしょうか?

  • 一時表 を表単位で

    お世話になっております。 Oracle10gで テーブル単位でTemporary Tableが出来ないか 試行錯誤しております。 要件として、Webアプリケーションで100万件のデータをSelectします。 その際、全データを取得するには、遅すぎるので、分割して取得しています。 現在では、C#で、サーバ側で取得Temporary Table Insertして、そのデータを参照するようにしているのですが、 Insertが遅いのと、C#に一度持ってきていますので、メモリが不安な状態です。 これを、create global temporary table CRE_TABLE_NAME as select * from TABLE_NAME にして、CRE_TABLE_NAMEを参照したいのですが、dropタイミングがつかめませんでした。 そこで、このテーブルが自動的にdropしたいのですが、何か良い案はありませんでしょうか? 思いついたのが、temporary tableにテーブル情報を保持して、sessionが切れた、時点で消えるのを利用して、テーブルdropのトリガーを記載しようと思ったのですが、そのトリガーを思いつきませんでした。 どなたか、代替案または、実装したことがある方、よろしくお願いします。

  • MySQL:一つを除いてすべてのフィールドを選択

    こんにちは、 データベースにはTABLE1とTABLE2の二つのテーブルがあって、TABLE1からTABLE2に、一つのフィールドを除いてほかのすべてのフィルードを移すには、どうすればいいのでしょうか INSERT INTO TABLE2 SELECT * FROM TABLE1 WHERE field_name != ID みたいなものがないのでしょうか IDフィールド以外にほかのすべてのフィールドを移したい。 TABLE 2の構造は IDフィールド COL2 COL3 COL4 ... COL50 つまりCOL2からCOL50までのデータを移したいのですが、できればフィールドを一つ一つ書くのを避けたいのです。 詳しい方がいらっしゃいましたら。ご回答をよろしくお願いします。

    • ベストアンサー
    • MySQL
  • DBリンク&シノニム経由インデックス

    Oracle8iサーバ(サービス名:Aサーバ)と Oracle10gサーバ(サービス名:Bサーバ)があります。 Aサーバに作られた、aスキーマに、test_tableというテーブルがあります。 そのtest_tableをBサーバに作られた、bスキーマから参照する為に、 DBリンク:BA_linkを作成しました。 実際に、bスキーマから参照する場合は、 同スキーマに、 CREATE SYNONYM test_table FOR test_table@BA_link; のように作られたシノニムを利用して、参照します。 抽出に時間がかかるので、インデックスを作成しようと思うのですが、 どのスキーマにどのように作成すればよいのでしょうか? ちなみにインデックスの対象にしたい項目は、 VAR_ITEM VARCHAR2(10) NUM_ITEM NUMBER(5) とします。 ちなみにbスキーマにて、 CREATE INDEX test_table_IX1 ON test_table (VAR_ITEM, NUM_ITEM); と実行したところ、 ORA-02021: リモート・データベースに対するDDL操作が無効です・ というエラーが発生しました。 DBリンク先自身に、作成すべきということはなんとなく予想が つくのですが、そのインデックスはDBリンク経由でも有効なのでしょうか?