在Oracle數(shù)據(jù)庫(kù)中,審計(jì)(Audit)是一項(xiàng)非常重要的功能。它可以幫助DBA追蹤和監(jiān)控?cái)?shù)據(jù)庫(kù)中的安全事件和行為。在審計(jì)中,oracle aud$ sqltext是一個(gè)非常重要的表。本文將會(huì)介紹這個(gè)表的作用、結(jié)構(gòu)和用法。
oracle aud$ sqltext表記錄了所有執(zhí)行的SQL語(yǔ)句。它的結(jié)構(gòu)如下:
CREATE TABLE SYS.AUD$ ( SESSIONID NUMBER NOT NULL, ENTRYID NUMBER NOT NULL, STATEMENTID NUMBER NOT NULL, TIMESTAMP# DATE NOT NULL, USERID VARCHAR2(30), USERHOST VARCHAR2(128), TERMINAL VARCHAR2(255), ACTION# NUMBER NOT NULL, RETURNCODE NUMBER, OBJ$CREATOR VARCHAR2(30), OBJ$NAME VARCHAR2(128), AUTH$PRIVILEGES NUMBER, AUTH$GRANTEE VARCHAR2(30), NEW$OWNER VARCHAR2(30), NEW$NAME VARCHAR2(128), SES$ACTIONS VARCHAR2(19), SES$TID NUMBER, LOGOFF$LREAD NUMBER, LOGOFF$PREAD NUMBER, LOGOFF$LWRITE NUMBER, LOGOFF$DEAD NUMBER, LOGOFF$TIME DATE, COMMENT$TEXT VARCHAR2(4000), CLIENTID VARCHAR2(64), SPARE1 NUMBER, SPARE2 VARCHAR2(255), OBJ$LABEL VARCHAR2(128), SES$LABEL VARCHAR2(128), PRIV$USED NUMBER, SESSIONCPU NUMBER, NTIMESTAMP# TIMESTAMP(6) ) AUDIT;
其中,除了前幾個(gè)字段,其它的字段都是用于記錄上下文信息的。比如,OBJ$CREATOR和OBJ$NAME字段用于記錄SQL語(yǔ)句所涉及的對(duì)象(表、視圖、用戶等)的創(chuàng)建者和名稱。AUTH$PRIVILEGES和AUTH$GRANTEE字段用于記錄誰(shuí)授予了哪些權(quán)限。SES$ACTIONS和SES$TID字段用于記錄會(huì)話ID和會(huì)話執(zhí)行的動(dòng)作等。
而最重要的字段就是第一個(gè)字段SESSIONID,它用于關(guān)聯(lián)oracle aud$ sqltext表和oracle aud$表。通過(guò)它,我們可以知道哪個(gè)會(huì)話執(zhí)行了哪些SQL。
舉個(gè)例子:
SQL> audit select any table, delete any table, insert any table, update any table; SQL> select * from tab; no rows selected
執(zhí)行完上述語(yǔ)句后,相應(yīng)的數(shù)據(jù)就會(huì)被記錄在oracle aud$和oracle aud$ sqltext兩個(gè)表中。我們可以用如下的SQL查詢oracle aud$ sqltext表:
SQL> select sqltext from sys.aud$ where sessionid = (select sid from v$session where audsid = USERENV('SESSIONID')); SQLTEXT --------------------------------------- AUDIT SELECT ANY TABLE, DELETE ANY TABLE, INSERT ANY TABLE, UPDATE ANY TABLE SELECT * FROM TAB
通過(guò)sessionid字段,我們可以輕松地知道本次會(huì)話所執(zhí)行的SQL語(yǔ)句。很顯然,對(duì)于DBA來(lái)說(shuō),這個(gè)功能非常有用。在我們排查問(wèn)題時(shí),將我們需要的日志行的值與users,db_links,表等術(shù)語(yǔ)一起搜索可以幫助我們更好地理解數(shù)據(jù)庫(kù)引擎如何執(zhí)行進(jìn)一步的查詢。此外,這些數(shù)據(jù)還可以用于分析最常用的數(shù)據(jù)庫(kù)資源類型或?yàn)槲覀兘鉀Q鎖或死鎖的問(wèn)題提供線索。
總之,oracle aud$ sqltext表是Oracle審計(jì)功能中一個(gè)非常重要的組成部分。它記錄了所有的SQL語(yǔ)句,并且通過(guò)SESSIONID字段可與oracle aud$表相關(guān)聯(lián),非常有用。