• 締切済み

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等ではないので執筆者に問い合わせるなどはできないようです。

  • Oracle
  • 回答数1
  • ありがとう数11

みんなの回答

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 > 出展が明記できてなくて申し訳ありません。個人的なblog等ではないので執筆者に > 問い合わせるなどはできないようです。 迷ったらマニュアルを見るようにすると良いと思います。 Version が明記されていないので、11.2 のマニュアルを見てみました。 Audit 文 http://docs.oracle.com/cd/E16338_01/server.112/b56299/statements_4007.htm#i2059073 これによると、最初のAudit table 文は「CREATE TABLE, DROP TABLE, TRUNCATE TABLE」 のSYSTEM 権限監査の設定のようです。 次に、「AUDIT TABLE ON <テーブル名>」と言う構文は無いようです。 > また、特定のテーブルに対するすべての操作の監査をするには > AUDIT SELECT,INSERT,UPDATE,DELETE,LOCK ON <Schema>.<Object> BY ACCESS; > だけではDROPやCREATEが監査できないので不十分でAUDIT TABLEと組み合わせないと > 無理ということになるのでしょうか? この場合、OBJECT 監査なのでAudit all on <Schema>.<Object> ~ で監査設定ができますが、SYSTEM 権限監査でやっているCreate, Drop, Truncate 等は 監査されません。

参考URL:
http://docs.oracle.com/cd/E16338_01/server.112/b56299/toc.htm

関連するQ&A

  • Oracle audit trail

    auditのログが出力先されません。 パラメータは次の通りです。 SQL> show parameter audit audit_file_dest string C:\TEMP audit_sys_operations boolean FALSE audit_syslog_level string audit_trail string OS auditを設定しました。 SQL> audit select on TESTUSER.TESTTABLE; 監査が成功しました。 しかし、次のSQLを実行しても、ログが出力されません(C:\TEMPの中を探しましたが見つかりません)。 SELECT * FROM TESTUSER.TESTTABLE;

  • DDLトリガーの作成にて

    お世話になります。 oracleにDDLトリガーを作成したいのですが、エラーが出て作成出来ません。 AFTER DDL on DATABASEのAFTERのところで エラー内容:「ORA-04072: トリガー型が無効です」 が発生します。 試しに、AFTER insert にするとここの部分は通るのですが、作成したいのはCREATEやDROPの時に起動するDDLトリガーなのです。 ちなみに、AFTER create or drop としても同じエラーが発生します。 ネットやoracleのリファレンスも見ましたが今だ解決出来ないでおりますので、ぶしつけな質問なのですが、どこが悪いのか教えて戴きたいです。 -- 作成するトリガーは下記となります ------------------------------------- CREATE OR REPLACE TRIGGER SYS.AFTER_DDL_EVENT AFTER DDL on DATABASE WHEN (ora_sysevent not in ('AUDIT','TRUNCATE')) DECLARE VCW_MODULE varchar2(48) := null; NW_CNT number := 0; BEGIN insert into ログ格納テーブル ・・・ if ( ora_sysevent = 'CREATE' ) then ・・・ elsif ( ora_sysevent = 'DROP' ) then ・・・ end if; END; / です。CREATEやDROPが発生した時にログを残したいのです。 oracle8ではDDLトリガーは作成出来ないってことは無いですよねぇ・・・。 環境は、oracle8、windowsNTサーバー 以上、誰か教えて~

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

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

  • 無名ブロック内でのDDL実行について

    環境は Linux + oracle 10g R2です。 簡単な無名プロシージャを書いていてはまって しまいました。 分かる方でしたら、あっというまに指摘していただけそうなので こちらに質問しました。 無名ブロック内で以下の事を行いたいのですが、うまく動作を確認できません。 ※以下は意味の無い処理となっていますが、今回説明用に短くしてみました。 ◇実現したい事 1.CREATE TABLE文の実行 (ここではEX01テーブルを作成します) 2.CREATE したテーブルにたいしてINSERT 3.CREATE したテーブルのDROP ◇私の実行結果 $ sqlplus scott/tiger@orcl SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME ='EX01'; レコードが選択されませんでした。 -- 私の思いでは以下のプロシージャは正常に動作するのでは? -- と思うのですが、以下の通りエラーとなってしまいます。 -- SQL> BEGIN 2 DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE EX01 ( C1 NUMBER,C2 VARCHAR2(10))'); 3 INSERT INTO EX01(C1,C2) VALUES(1,'AAA'); 4 DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TABLE EX01'); 5 END; 6 / INSERT INTO EX01(C1,C2) VALUES(1,'AAA'); * 行3でエラーが発生しました。: ORA-06550: 行3、列13: PL/SQL: ORA-00942: 表またはビューが存在しません。 ORA-06550: 行3、列1: PL/SQL: SQL Statement ignored -- -- なので、処理を分割して行ってみました。 -- まずはCREATE TABLEのみ -- SQL> BEGIN 2 DBMS_UTILITY.EXEC_DDL_STATEMENT('CREATE TABLE EX01 ( C1 NUMBER,C2 VARCHAR2(10))'); 3 END; 4 / PL/SQLプロシージャが正常に完了しました。 -- -- CREATE TABLEは正常に動作したようです。 -- SQL> INSERT INTO EX01(C1,C2) VALUES(1,'AAA'); 1行が作成されました。 -- -- INSERT文も正常に動作したようです。 -- SQL> BEGIN 2 DBMS_UTILITY.EXEC_DDL_STATEMENT('DROP TABLE EX01'); 3 END; 4 / PL/SQLプロシージャが正常に完了しました。 -- -- なんとDROP TABLEも正常に動作したようです。 -- SQL> SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME ='EX01'; レコードが選択されませんでした。 SQL> そうなんです。3行まとめて記載するとエラーとなるのですが、 上記の通りそれぞれ分けて実行すると正常に動作するのです。 これはどこが悪いのでしょうか? 情けない事に、今日の午後はこれでほとんどつぶれてしまいました。 どなたか助けてください。 以上よろしくお願いします。

  • テーブルが存在していたらDROPしてからCREATEするには?

    作成しようとするテーブルが既に存在している場合 一度DROP TABLEを行いたくて、以下のSQLを作成したのですが 削除が実行されません。 そもそものやり方自体が間違っているのでしょうか? 実行後のメッセージは テーブルが存在しなかった場合→コマンドは正常に完了しました。 テーブルが存在した場合→データベースにオブジェクト名 'SLIP_ITEMXX' が既に存在します。 と、表示されます。 --テーブルが存在した場合削除する ※ストアド使用 CREATE PROCEDURE SP_SLIP_ITEMXX AS DECLARE @TableName varchar DECLARE @Sql varchar set @TableName = 'SLIP_ITEMXX' SET @Sql = 'if exists (select * from dbo.sysobjects where id = object_id(N' + @TableName + ') ' + 'DROP TABLE ' + @TableName EXEC(@Sql) GO --テーブル生成 CREATE TABLE SLIP_ITEMXX( [slip_no] [int] NOT NULL ) GO --ストアド削除 DROP PROCEDURE SP_SLIP_ITEMXX GO

  • pg_queryでテーブルを

    作りたいのですが 既に存在するテーブルを作ろうとすると エラーになり作れません そこでこれから作ろうとする名前の テーブルが存在しているかどうかを調べて 存在していれば drop table してから create table 使用と考えています テーブルが存在しているかどうかを知るための SQL文を教えてください それが無ければ他の対処方法を教えてください

    • ベストアンサー
    • PHP
  • AccessのテーブルをSQL文にしたい

    urizakaです。 さて、今回質問したいのは、Accessで作ったテーブルをSQL文にする方法です。 具体的には、ACCESSで作ったテーブルを、 CREATE TABLE ××× (              ) INSERT… というSQL文にしたいのですが、これはどうすれば良いのでしょうか? すみませんが、教えてください。            

  • フィールドサイズの変更方法について

    お世話になります。SQL初心者です。 VB5+ACCESS97でデータが入っているテーブルのある特定のテキスト型の列サイズを5から6に変更する必要が出てきました。 テーブル名を変えたくないのですが、 1.列サイズを変更した新テーブルをCREATE 2.元テーブルを全項目SELECTして新テーブルにINSERT 3.元テーブルをDROP 4.新テーブルと同じ属性で元テーブル名で新々テーブルをCREATE 5.新テーブルから全項目SELECTして新々テーブルにINSERT 6.新テーブルをDROP この方法しかないでしょうか。コピーのコピーで時間がかかりそうで悩んでます。 手元の書籍ではACCESS97では、テーブル名のリネームとか、ORACLEのALTER TABLEのような属性変更ができないような気がするのですが、もしコマンドをご存知でしたら併せて教えてくださると、とても助かります。 よろしくお願いします。

  • 任意のテーブルをdrop tableしたい

    こんにちは,よろしくお願いします。 日々の業務アプリでOracleDB上にCreateされる無数の ワークテーブルを、一日一回dropするDOSバッチを考えております。 テーブルの先頭文字列は「WAK」なのですが、それ以降 年月日字分秒を付加しているために、dropするにもテーブル名を 特定できません。 テーブル名称例) WAK20060112122354 WAK20060112144852 ・・・・ drop table コマンドで、ワイルドカードのようなものを 指定できますでしょうか? イメージとしては、「drop table WAK%1*」(%1はYYYYMMDD)の ような感じです。 環境はWin2003R2にOracle10g(10.1.0)を乗せています。 よろしくお願いします。

  • テーブルにはったインデックスは、ビューに対しても効力があるのか

    環境:RedHat Linux AS3.0 / PostgresSQL 7.3.6 Publicスキーマにインデックス付きのテーブルを作成し、 複数のスキーマにビューを作成してそのテーブルをそのまま参照したいと思っています。 (スキーマの数が非常に多いので、実体をひとつにし、  ディスク容量を抑えるのが目的です。) 環境のイメージは以下の通りです。 ◆Publicスキーマにテーブル作成------- create table TEST_TABLE ( id int, data varchar ); ◆test_tableにインデックスを作成------- create unique index TEST_KEY on TEST_TABLE ( id ); ◆test_schemaスキーマを作成------- create schema TEST_SCHEMA; ◆test_schemaスキーマにビューを作成------- create view TEST_SCHEMA.TEST_VIEW as select id, data from TEST_TABLE ; このような環境にて「TEST_VIEW」にSELECTをかけた場合、 「TEST_KEY」は踏襲されるのでしょうか? ビューに対してインデックスは作成できないようなので、 テーブルに対してはられたインデックスはビューでも生きている のではないかと考えたのですが、 上記認識で合っているかどうか ご存知の方がいらっしゃいましたらご教授頂けると助かります。 宜しくお願い申し上げます。