1. 程式人生 > >ORACLE審計DDL語句

ORACLE審計DDL語句

建立儲存DDL語句的表

create table audit_ddl
(
opertime timestamp PRIMARY KEY,
ip varchar2(20),
hostname varchar2(30),
operation varchar2(30),
object_type varchar2(30),
object_name varchar2(30),
sql_stmt clob,
db_schema varchar2(30)
);

建立 捕獲DDL語句的觸發器

create or replace trigger trg_audit_ddl
  after ddl on database
DECLARE PRAGMA AUTONOMOUS_TRANSACTION;
n NUMBER; stmt clob := NULL; sql_text ora_name_list_t; BEGIN n := ora_sql_txt(sql_text); FOR i IN 1 .. n LOOP stmt := stmt || sql_text(i); END LOOP; INSERT INTO audit_ddl (opertime, ip, hostname, operation, object_type, object_name, sql_stmt,db_schema) VALUES
(systimestamp, sys_context('userenv', 'ip_address'), sys_context('userenv', 'terminal'), ora_sysevent, ora_dict_obj_type, ora_dict_obj_name, stmt, user );
COMMIT; END; /

建立審計DDL的觸發器成功,並且是生效的

[email protected] >select t.object_name,t.object_type,t.status,t.last_ddl_time from
dba_objects t where t.object_type='TRIGGER' and t.object_name='TRG_AUDIT_DDL'; OBJECT_NAME OBJECT_TYPE STATUS LAST_DDL_TIME -------------------- ------------------- ------- ------------------ TRG_AUDIT_DDL TRIGGER VALID 03-MAY-18

檢視並確認隱藏引數_system_trig_enabled 為 true:

[email protected] >SELECT   ksppinm, ksppstvl, ksppdesc FROM   x$ksppi x, x$ksppcv y WHERE   x.indx = y.indx AND  ksppinm = '_system_trig_enabled';

KSPPINM              KSPPSTVL             KSPPDESC
-------------------- -------------------- ----------------------------------------
_system_trig_enabled TRUE                 are system triggers enabled

建立測試賬戶test 進行測試

[email protected]  >create user test identified by 123456;
User created.

[email protected] >grant connect,resource to test;

Grant succeeded.

[email protected]  >conn test/123456;
Connected.

[email protected] >create table audit_ddl_test(id number,name varchar2(20));

Table created.
[email protected]  >insert into audit_ddl_test values(1,'wwww');

1 row created.

[email protected]  >commit;

Commit complete.

[email protected] >truncate table audit_ddl_test;

Table truncated.

[email protected] >alter table audit_ddl_test add (insert_date date default(sysdate));

Table altered.

[email protected]>desc audit_ddl_test
 Name                                                                                      Null?    Type
 ----------------------------------------------------------------------------------------- -------- ------------------------------------------------------------
 ID                                                                                                 NUMBER
 NAME                                                                                               VARCHAR2(20)
 INSERT_DATE                                                                                        DATE

[email protected] >drop table audit_ddl_test;

Table dropped.
[email protected]  >select * from audit_ddl where db_schema='TEST';

OPERTIME        IP              HOSTNAME        OPERATION                      OBJECT_TYPE                    OBJECT_NAME
--------------- --------------- --------------- ------------------------------ ------------------------------ --------------------
SQL_STMT                                                                         DB_SCHEMA
-------------------------------------------------------------------------------- ---------------
03-MAY-18 04.12                 pts/1           CREATE                         TABLE                          AUDIT_DDL_TEST
.13.072252 PM
create table audit_ddl_test(id number,name varchar2(20))                         TEST


03-MAY-18 04.14                 pts/1           TRUNCATE                       TABLE                          AUDIT_DDL_TEST
.27.000973 PM
truncate table audit_ddl_test                                                    TEST

03-MAY-18 04.16                 pts/1           ALTER                          TABLE                          AUDIT_DDL_TEST
.48.211531 PM
alter table audit_ddl_test add (insert_date date default(sys                     TEST
date))

03-MAY-18 04.17                 pts/1           ALTER                          TABLE                          AUDIT_DDL_TEST
.20.898208 PM
ALTER TABLE "TEST"."AUDIT_DDL_TEST" RENAME TO "BIN$a0nVHhtJf                     TEST
kTgU5cAAArVkA==$0"

03-MAY-18 04.17                 pts/1           DROP                           TABLE                          AUDIT_DDL_TEST
.20.900534 PM
drop table audit_ddl_test                                                        TEST

相關推薦

ORACLE審計DDL語句

建立儲存DDL語句的表 create table audit_ddl ( opertime timestamp PRIMARY KEY, ip varchar2(20), hostname varchar2(30), operation varc

檢視oracleDDL語句

 使用dbms_metadata.get_ddl遇到ORA-31603 建了一個外部表,想看看這個表的資訊,一查就報錯了: SQL> select dbms_metadata.get_ddl('TABLE','ext_case1') from dual; ER

OracleDDL語句為什麼不能回滾

在ITPUB上看到有人提出了這個問題。在Sqlserver或一些其他的資料庫中,DDL語句也是可以回滾的,那麼Oracle為什麼不能回滾DDL語句呢。 要說明這個問題,首先需要說明什麼是DDL語句。DDL語句是資料定義語句,包括各種資料物件的建立、修改和刪除,以及授權等操作。 在Oracle中DDL

oracle監控DDL語句

就是一個未做任何歸檔備份的9i資料庫老是被出現一個表被莫名drop,並在回收站不留任何痕跡,最後只得建立觸發器的方法,來跟蹤執行這個操作的時間和主機資訊,問題予以解決,記錄在此: -- Create tablecreate table T_WCDMA_AUDIT_DDL(DD

oracle常用DDL語句

--DDL(database define ) create table t_student( f_id int, f_name varchar2(10), f_sex char(2), f_age int,

Oracle與SQLSERVER 批處理執行 DDL 語句

1. 公司裡面的 很多同名的資料庫 的一個表都錯誤的多了一個列 要是每個都用資料庫連線工具開啟 感覺太廢時間了. 比如寫個sql命令來執行. 具體方法: Oracle 使用 sqlplus sqlplus lcoe739999/Test6530 @runora.sql 相同目錄下面放一個名

Oracle DB 使用DDL語句建立和管理表

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

oracle DML、DDL語句區別

DML:資料操作語言,SQL中處理資料等操作統稱為資料操縱語言       它們是SELECT、UPDATE、INSERT、DELETE,就象它的名字一樣,這4條命令是用來對資料庫裡的資料進行操作的語言,不修改表的結構,只修改表的內容 需要commit 才能真正被執行

Oracle操作語句DDL語句

DDL:資料庫定義語言,可以自動提交事物。(create alter drop rename truncate comment) 資料庫三大正規化 第一正規化:列中的值不能再分割 第二正規化:在滿足第一正規化的基礎上,設計的表中的每個列都要依賴於主鍵列。 第三正規化:在滿

Oracle 儲存過程中的DDL語句

Oracle的儲存過程,是我們使用資料庫應用開發的重要工具手段。在儲存過程中,我們大部分應用場景都是使用DML語句進行資料增刪改操作。本篇中,我們一起探討一下資料定義語句DDL在儲存過程中使用的細節和要點。 1、“借道而行”的DDL 從Oracle PL/SQL和儲存過

ORACLE如何使用DBMS_METADATA.GET_DDL獲取表,表空間,使用者,檢視等的DDL語句

1.顯示設定: /*建立DBMS_METADATA: @?/rdbms/admin/catmeta.sql */ SETSERVEROUTPUTON SETLINESIZE1000 SETFEEDBACKOFF setlong999999 S

oracle之 獲取建表ddl語句

第一種方法是使用工具,如: pl/sql developer,在【工具】--【匯出使用者物件】出現就可以得到建表指令碼。 第二種方法是,sql語句。 DBMS_METADATA.GET_DDL包可以得到資料庫的物件的ddl指令碼。如下(SQLPLUS中執行):  1.得 到

ORACLE 檢視完整DDL語句

通過SQLPLUS方式檢視ORACLE的某個表完整的建表語句set line 200 set pagesize 0 set long 99999 select dbms_metadata.get_ddl

Oracle 觸發器實現DDL語句監控

前言 建立此觸發器的主要目的是為了控制資料庫的版本,雖然會將DDL語句保留但難免會出現遺漏,所以建立DDl觸發器記錄DDL操作,主要是用來核對資料庫變更的SQL語句 建立使用者並授權 #需要使用sys使用者授權 CREATE USER dbadmin IDENTIFI

Oracle 過程中執行動態 SQL 或 DDL 語句

如果你用的是 Oracle 8i 及以上的版本,那簡單,在過程中用 execute immediate sql_str 就行, sql_str 是一個拼湊的 SQL 語句,但這個動態語句中帶引數,或 Select 的結果要 into 到變數中時就要稍加留心一下了。而在

ORACLE』 SQL語句簡單應用(四)(11g)

union times truncate sql語句 默認值 位數 lib rownum dual 排序 後加 nulls last 在降序排列中把null放在最後 select to_char(sysdate,‘q‘) from dual; dual

ORACLE』 SQL語句簡單應用(五)(11g)

應用 11g sql cal foreign ora 每次 int pri not null 非空 字段+not null unique 唯一 primary key 主鍵(確保數據不能重復) foreign key 外鍵 check 必須

Oracle流程控制語句

控制 space reverse logs 2.3 1.2 流程控制語句 case ora 1.選擇語句 1.1 IF...THEN...END IF語句 DECLARE MY_AGE INT; IF MY_AGE IS NULL THEN DBMS

oracle 基本查詢語句及實例

空值 into microsoft clas 運算 cor select like sse 1、查詢所有列 select * from 表名; 2、查詢表結構 desc 表名; 3、查詢指定列 select ename,sal,job from 表名; 4、rac

oracle 審計(一)

分數 效果 opera run 審計 官方 導出 註意 per 一、何謂數據庫審計? 數據庫審計,就是對數據庫的活動做跟蹤記錄,主要包括數據庫連接,SQL語句執行,數據庫對象訪問這些方面的跟蹤記錄。 二、審記記錄的存儲方式 分為兩種:一種是存儲在操作系統文件中,一種是存