ORACLE AUDIT
審計(Audit)用於監視使用者所執行的資料庫操作,並且Oracle 會將審計跟蹤結果存放到OS 檔案(預設位置為$ORACLE_BASE/admin /$ORACLE_SID/adump/),或資料庫(儲存在system 表空間中的SYS.AUD$表中,可透過檢視dba_audit_trail 檢視)中。審計可以提供有用的資訊,用於揭示許可權的濫用和誤用。當需要一定的粒度時,DBA 可以使用細粒度的審計來監控對錶中某些行或列的訪問,而不僅僅是是否訪問表。
在oracle 11g 中,審計功能(AUDIT_TRAIL)是預設開啟的。審計資料預設存放SYSTEM 表空間下的AUD$審計字典基表上。開啟審計資料庫會增加消耗,降低業務效能,因此,如果不是很必要,在安裝好資料庫後,可適當選擇關閉資料庫審計功能。
Oracle 公司還推薦使用基於OS 檔案的審計日誌記錄方式(OSaudit trail files),當AUDIT_TRAIL 設定為OS 時,審計記錄檔案將在AUDIT_FILE_DEST 引數所指定的目錄中生成。
一、審計型別
語句審計 |
按照語句型別審計SQL 語句,而不論訪問何種特定的模式物件。也可以在資料庫中指定一個或多個使用者,針對特定的語句審計這些使用者 |
許可權審計 |
審計系統許可權,例如CREATE TABLE 或ALTER INDEX。和語句審計一樣,許可權審計可以指定一個或多個特定的使用者作為審計的目標 |
模式物件審計 |
審計特定模式物件上執行的特定語句(例如,DEPARTMENTS 表上的UPDATE 語句)。模式物件審計總是應用於資料庫中的所有使用者 |
細粒度的審計 |
根據訪問物件的內容來審計表訪問和許可權。使用程式包DBMS_FGA 來建立特定表上的策略 |
二、審計位置
審計記錄可以傳送到SYS.AUD$資料庫表或作業系統檔案。為了啟用審計並指定記錄審計記錄的位置,將初始引數AUDIT_TRAIL 設定為如下幾個值之一:
NONE, FALSE |
禁用審計 |
OS |
啟用審計,將審計記錄傳送到作業系統檔案 |
DB, TRUE |
啟用審計,將審計記錄傳送到SYS.AUD$表 |
DB_EXTENDED |
啟用審計,將審計記錄傳送到SYS.AUD$表,並在CLOB 列SQLBIND 和SQLTEXT 中記錄額外的資訊 |
XML |
啟用審計,以XML 格式寫所有審計記錄 |
EXTENDED |
啟用審計,在審計跟蹤中記錄所有列,包括SqlText 和SqlBind 的值 |
引數AUDIT_TRAIL 不是動態的,為了使AUDIT_TRAIL 引數中的改動生效,必須關閉資料庫並重新啟動。在對SYS.AUD$表進行審計時,應該注意監控該表的大小,以避免影響SYS 表空間中其他物件的空間需求。推薦週期性歸檔SYS.AUD$中的行,並且擷取該表。
在Oracle11g 中CREATE SESSION 作為受審計的許可權來被記錄,因此當SYSTEM 表空間因磁碟空間而無法擴充套件時將導致這部分審計記錄無法生成,這將最終導致普通使用者的新會話將無法正常建立,普通使用者將無法登陸資料庫。在這種場景中仍可以使用SYSDBA 身份的使用者建立會話,在將審計資料合適備份後刪除一部分記錄,或者TRUNCATE AUD$都可以解決上述問題。在預設情況下會以AUTOEXTEND ON 自動擴充套件選項建立SYSTEM 表空間,因此係統表空間在必要時會自動增長,我們所需注意的是磁碟上的剩餘空間是否能夠滿足其增長需求,以及資料檔案擴充套件的上限,對於普通的8k smallfile 表空間而言單個資料檔案的最大尺寸是32G。
三、開戶審計功能
SQL> alter system set audit_trail=db_extended scope=spfile;
重啟資料庫生效:
SQL> startup force
四、語句審計:
對於語句審計,audit 命令的格式看起來如下所示:
AUDIT sql_statement_clause BY {SESSION |ACCESS}WHENEVER [NOT] SUCCESSFUL;
引數如下:
sql_statement_clause 包含很多條不同的資訊,例如希望審計的SQL 語句型別以及審計什麼人。
by access 在每次動作發生時都對其進行審計,by session 只審計一次。預設是by session。
whenever successful 審計成功的動作:沒有生成錯誤訊息的語句。
whenever not successful 審計語句的命令是否失敗
對於大多數類別的審計方法,如果確實希望審計所有型別的表訪問或某個使用者的任何許可權,則可以指定all 而不是單個的語句型別或物件。
表1-1 列出了可以審計的語句型別,並且在每個類別中包含了相關語句的簡要描述。如果指定all,則審計該列表中的任何語句。然而,表1-2 中的語句型別在啟用審計時不屬於all 類別;必須在audit 命令中顯式地指定它們。
表1-1 包括在ALL 類別中的可審計語句
語 句 選 項 |
SQL 操作 |
ALTER SYSTEM |
所有ALTER SYSTEM 選項,例如,動態改變例項參 數,切換到下一個日誌檔案組,以及終止使用者會話 |
CLUSTER |
CREATE、ALTER、DROP 或TRUNCATE 叢集 |
CONTEXT |
CREATE CONTEXT 或DROP CONTEXT |
DATABASE LINK |
CREATE 或DROP 資料庫連結 |
DIMENSION |
CREATE、ALTER 或DROP 維數 |
DIRECTORY |
CREATE 或DROP 目錄 |
INDEX |
CREATE、ALTER 或DROP 索引 |
MATERIALIZED VIEW |
CREATE、ALTER 或DROP 物化檢視 |
NOT EXISTS |
由於不存在的引用物件而造成的SQL 語句的失敗 |
PROCEDURE |
CREATE 或DROP FUNCTION、LIBRARY、PACKAGE、 PACKAGE BODY 或PROCEDURE |
PROFILE |
CREATE、ALTER 或DROP 配置檔案 |
PUBLIC DATABASE LINK |
CREATE 或DROP 公有資料庫連結 |
PUBLIC SYNONYM |
CREATE 或DROP 公有同義詞 |
ROLE |
CREATE、ALTER、DROP 或SET 角色 |
ROLLBACK |
SEGMENT CREATE、ALTER 或DROP 回滾段 |
SEQUENCE |
CREATE 或DROP 序列 |
SESSION |
登入和退出 |
SYNONYM |
CREATE 或DROP 同義詞 |
SYSTEM |
AUDIT 系統許可權的AUDIT 或NOAUDIT |
SYSTEM GRANT |
GRANT 或REVOKE 系統許可權和角色 |
TABLE |
CREATE、DROP 或TRUNCATE 表 |
TABLESPACE |
CREATE、ALTER 或DROP 表空間 |
TRIGGER |
CREATE、ALTER(啟用/禁用)、DROP 觸發器;具有 ENABLE ALL TRIGGERS 或DISABLE ALL TRIGGERS 的ALTER TABLE |
TYPE |
CREATE、ALTER 和DROP 型別以及型別主體 |
USER |
CREATE、ALTER 或DROP 使用者 |
VIEW |
CREATE 或DROP 檢視 |
表1-2 顯式指定的語句型別
語 句 選 項 |
SQL 操 作 |
ALTER SEQUENCE |
任何ALTER SEQUENCE 命令 |
ALTER TABLE |
任何ALTER TABLE 命令 |
COMMENT TABLE |
新增註釋到表、檢視、物化檢視或它們中的任何列 |
DELETE TABLE |
刪除表或檢視中的行 |
EXECUTE PROCEDURE |
執行程式包中的過程、函式或任何變數或遊標 |
GRANT DIRECTORY |
GRANT 或REVOKE DIRECTORY 物件上的許可權 |
GRANT PROCEDURE |
GRANT 或REVOKE 過程、函式或程式包上的許可權 |
GRANT SEQUENCE |
GRANT 或REVOKE 序列上的許可權 |
GRANT TABLE |
GRANT 或REVOKE 表、檢視或物化檢視上的許可權 |
GRANT TYPE |
GRANT 或REVOKE TYPE 上的許可權 |
INSERT TABLE |
INSERT INTO 表或檢視 |
LOCK TABLE |
表或檢視上的LOCK TABLE 命令 |
SELECT SEQUENCE |
引用序列的CURRVAL 或NEXTVAL 的任何命令 |
SELECT TABLE |
SELECT FROM 表、檢視或物化檢視 |
UPDATE TABLE |
在表或檢視上執行UPDATE |
注意:
從Oracle Database 11g 開始,只有在初始引數AUDIT_TRAIL 被設定為DB_EXTENDED 時,才填充DBA_AUDIT_TRAIL 中的列SQL_TEXT 和SQL_BIND。預設情況下,AUDIT_TRAIL 的值是DB。
示例:
[oracle@ocp Desktop]$ rlwrap sqlplus / as sysdba
SYS@orcl>show parameter audit_trail
SYS@orcl> alter system set audit_trail=db_extended
scope=spfile;
SYS@orcl> startup force
SYS@orcl>show parameter audit_trail
SYS@orcl> alter user scott account unlock identified by
scott;
SYS@orcl> audit create table by scott by access;
SYS@orcl>select user_name,audit_option,success,failure from
dba_stmt_audit_opts where user_name='SCOTT';
SYS@orcl> conn scott/scott
SCOTT@orcl> create table tt(id int);
SCOTT@orcl> conn / as sysdba
SYS@orcl>select username,to_char(timestamp,'MM/DD/YY
HH24:MI') Timestamp,obj_name, action_name, sql_text from
dba_audit_trail where username= 'SCOTT';
使用noaudit 命令關閉審計,如下所示:
SYS@orcl> noaudit create table by scott;
SYS@orcl> conn scott/scott
SCOTT@orcl> create table ee(id int);
SCOTT@orcl> conn / as sysdba
SYS@orcl>select username,to_char(timestamp,'MM/DD/YY
HH24:MI') Timestamp,obj_name, action_name, sql_text from
dba_audit_trail where username= 'SCOTT';
五、許可權統計
審計系統許可權具有與語句審計相同的基本語法,但審計系統許可權是在sql_statement_clause 中,而不是在語句中,指定系統許可權。
例如,將ALTER TABLESPACE 許可權授予所有的DBA,生成審計記錄。啟用對這種許可權的審計的命令:
audit alter tablespace by access whenever successful;
每次成功使用ALTER TABLESPACE 許可權時,都會將一行內容新增到SYS.AUD$。
使用SYSDBA 和SYSOPER 許可權或者以SYS 使用者連線到資料庫的系統管理員可以利用特殊的審計。為了啟用這種額外的審計級別,可以設定初始引數AUDIT_SYS_OPERATIONS 為TRUE。這種審計記錄傳送到與作業系統審計記錄相同的位置。當使用其中一種許可權時執行的所有SQL 語句,以及作為使用者SYS 執行的任何SQL 語句,都會傳送到作業系統審計位置。
SYS@orcl> alter system set AUDIT_SYS_OPERATIONS=true
scope=spfile;
SYS@orcl> startup force
[oracle@ocp Desktop]$ cd /u01/app/oracle/admin/orcl/adump/
Vi 檢視審計內容
許可權審計示例:
SYS@orcl> audit create table by scott by access;
SYS@orcl> audit session by scott;
SYS@orcl> select user_name,privilege,success,failure from
dba_priv_audit_opts where user_name='SCOTT' order by
user_name;
SYS@orcl> conn scott/scott
SCOTT@orcl> create table tt(id int);
SCOTT@orcl> conn / as sysdba
SYS@orcl>select username,to_char(timestamp,'MM/DD/YY
HH24:MI') Timestamp,obj_name, action_name, sql_text from
dba_audit_trail where username= 'SCOTT';
SYS@orcl> noaudit create table by scott;
六、物件審計
AUDIT schema_object_clause BY {SESSION | ACCESS}WHENEVER [NOT] SUCCESSFUL;
schema_object_clause 指定物件訪問的型別以及訪問的物件。
可以審計特定物件上14 種不同的操作型別。物件審計選項如下:
對 象 選 項 |
說 明 |
ALTER |
改變表、序列或物化檢視 |
AUDIT |
審計任何物件上的命令 |
COMMENT |
新增註釋到表、檢視或物化檢視 |
DELETE |
從表、檢視或物化檢視中刪除行 |
EXECUTE |
執行過程、函式或程式包 |
FLASHBACK |
執行表或檢視上的閃回操作 |
GRANT |
授予任何型別物件上的許可權 |
INDEX |
建立表或物化檢視上的索引 |
INSERT |
將行插入表、檢視或物化檢視中 |
LOCK |
鎖定表、檢視或物化檢視 |
READ |
對DIRECTORY 物件的內容執行讀操作 |
RENAME |
重新命名錶、檢視或過程 |
SELECT |
從表、檢視、序列或物化檢視中選擇行 |
UPDATE |
更新表、檢視或物化檢視 |
物件審計示例:
SYS@orcl>show parameter audit_trail
SYS@orcl> alter system set audit_trail=db_extended
scope=spfile;
SYS@orcl>show parameter audit_trail
SYS@orcl> startup force
SYS@orcl> alter user scott account unlock identified by
scott;
SYS@orcl> audit select,insert,delete on scott.dept by
access;
SYS@orcl> select
object_name,object_type,alt,del,ins,upd,sel from
dba_obj_audit_opts;
SYS@orcl> conn scott/scott
SCOTT @orcl> insert into dept values(11,'aa','aa');
SCOTT @orcl> insert into dept values(12,'bb','bb');
SCOTT @orcl> commit;
SCOTT@orcl> conn / as sysdba
SYS@orcl> select timestamp,action_name,sql_text from
dba_audit_trail where owner='SCOTT';
SYS@orcl> noaudit select,insert,delete on scott.dept;
審計查詢
SYS@orcl>show parameter audit_trail
SYS@orcl> alter system set audit_trail=db_extended
scope=spfile;
SYS@orcl> startup force
SYS@orcl>show parameter audit_trail
SYS@orcl> alter user scott account unlock identified by
scott;
SYS@orcl> audit select,insert,delete on scott.dept by
access;
SYS@orcl>delete sys.aud$;
SYS@orcl> conn scott/scott
SCOTT @orcl> insert into dept values(13,'cc','cc');
SCOTT @orcl>select * from dept;
SCOTT @orcl>delete from dept where deptno=11;
SCOTT @orcl>update dept set loc='abc' where deptno=12;
SCOTT@orcl> conn / as sysdba
SYS@orcl>select
username,timestamp,owner,action_name,obj_name from
dba_audit_object;
七、細粒度的審計
細粒度的物件審計,或稱為FGA,審計變得更為關注某個方面,並且更為精確。由稱為DBMS_FGA 的PL/SQL 程式包實現FGA。
使用標準的審計,可以輕鬆發現訪問了哪些物件以及由誰訪問,但無法知道訪問了哪些行或列。細粒度的審計可解決這個問題,它不僅為需要訪問的行指定謂詞(或where 子句),還指定了表中訪問的列。透過只在訪問某些行和列時審計對錶的訪問,可以極大地減少審計表條目的數量。
程式包DBMS_FGA 具有4 個過程:
ADD_POLICY 新增使用謂詞和審計列的審計策略
DROP_POLICY 刪除審計策略
DISABLE_POLICY 禁用審計策略,但保留與表或檢視關聯的策略
ENABLE_POLICY 啟用策略
使用者wl 通常每天訪問HR.EMPLOYEES 表,查詢僱員的電子郵件地址。系統管理員懷疑wl 正在檢視經理們的薪水資訊,因此他們建立一個FGA 策略,用於審計任何經理對SALARY 列的任何訪問。
可以使用資料字典檢視DBA_FGA_AUDIT_TRAIL 訪問細粒度審計的審計記錄。如果一般需要檢視標準的審計行和細粒度的審計行,則資料字典檢視DBA_COMMON_AUDIT_TRAIL 結合了這兩種審計型別中的行。
示例如下:
[oracle@ocp Desktop]$ rlwrap sqlplus / as sysdba
SYS@orcl>show parameter audit_trail
SYS@orcl> alter system set audit_trail=db_extended
scope=spfile;
SYS@orcl> startup force
SYS@orcl>show parameter audit_trail
SYS@orcl> create user wl identified by wl;
SYS@orcl> grant create session to wl;
SYS@orcl> grant select on hr.employees to wl;
SYS@orcl> alter user hr account unlock identified by hr;
SYS@orcl> begin
dbms_fga.add_policy(object_schema => 'HR',
object_name => 'EMPLOYEES',
policy_name => 'SAL_SELECT_AUDIT',
audit_condition => 'instr(job_id,''_MAN'') > 0',
audit_column => 'SALARY');
end;
/
SYS@orcl> conn wl/wl
WL@orcl> select employee_id, first_name, last_name, email
from hr.employees where employee_id = 114;
WL@orcl> conn / as sysdba
SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')
timestamp,object_schema, object_name, policy_name,
statement_type from dba_fga_audit_trail where db_user =
'WL';
SYS@orcl> conn wl/wl
WL@orcl> select employee_id, first_name, last_name, salary
from hr.employees where employee_id = 114;
WL@orcl> conn / as sysdba
SYS@orcl> select to_char(timestamp,'mm/dd/yy hh24:mi')
timestamp,object_schema, object_name, policy_name,
statement_type from dba_fga_audit_trail where db_user =
'WL';
第一個查詢訪問經理資訊,但沒有訪問SALARY 列。第二個查詢與第一個查詢相同,但是訪問了SALARY 列,因此觸發了FGA 策略,從而在審計跟蹤中生成了一行
八、與審計相關的資料字典檢視
資料字典檢視 |
說 明 |
AUDIT_ACTIONS |
包含審計跟蹤動作型別程式碼的描述,例如 INSERT、DROP VIEW、DELETE、LOGON 和LOCK |
DBA_AUDIT_OBJECT |
與資料庫中物件相關的審計跟蹤記錄 |
DBA_AUDIT_POLICIES |
資料庫中的細粒度審計策略 |
DBA_AUDIT_SESSION |
與CONNECT 和DISCONNECT 相關的所有審計跟蹤記錄 |
DBA_AUDIT_STATEMENT |
與GRANT、REVOKE、AUDIT、NOAUDIT 和ALTER SYSTEM 命令相關的審計跟蹤條目 |
DBA_AUDIT_TRAIL |
包含標準審計跟蹤條目。USER_AUDIT_TRAIL 只包含已連線使用者的審計行 |
DBA_FGA_AUDIT_TRAIL |
細粒度審計策略的審計跟蹤條目 |
DBA_COMMON_AUDIT_TRAIL |
將標準的審計行和細粒度的審計行結合在一個檢視中 |
DBA_OBJ_AUDIT_OPTS |
對資料庫物件生效的審計選項 |
DBA_PRIV_AUDIT_OPTS |
對系統許可權生效的審計選項 |
DBA_STMT_AUDIT_OPTS |
對語句生效的審計選項 |
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31520497/viewspace-2156868/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Audit setupOracle
- ORACLE AUDIT審計(1)Oracle
- [20190530]oracle Audit檔案管理.txtOracle
- 【AUDIT]Oracle審計配置及常用sqlOracleSQL
- [20191129]oracle Audit檔案管理3.txtOracle
- [20191128]oracle Audit檔案管理2.txtOracle
- Oracle Audit 審計功能的認識與使用Oracle
- Disable Database Audit In Oracle 19c RAC-20220111DatabaseOracle
- Oracle 標準審計,設定AUDIT_SYSLOG _LEVEL引數Oracle
- mysqlalchemy audit extensionMySql
- audit by user by table
- AUDIT審計(2)
- MySQL審計auditMySql
- fluentd 推送 mariadb audit log
- 2.2.6 Overview of Common Audit ConfigurationsView
- linux監控工具auditLinux
- SQL Server 審計(Audit)SQLServer
- MySQL審計外掛-MariaDB Audit PluginMySqlPlugin
- FGA審計及audit_trail引數AI
- [20191203]enq: ZA - add std audit table partition.txtENQ
- mysql 5.7新增server_audit 安全審計功能MySqlServer
- Error processing condition on org.springframework.boot.actuate.autoconfigure.audit.AuditEventsEndpoiErrorSpringFrameworkboot
- [20191128]11GR2 asm例項audit檔案.txtASM
- [20230306]學習UNIFIED audit--dg相關問題.txtNifi
- Camstar MDB setfieldex 修改建模欄位不記錄Audit TrailAI
- [20230301]學習UNIFIED audit-整理AUDSYS.AUD$UNIFIED.txtNifi
- [20230303]學習UNIFIED audit--定期清理AUDSYS.AUD$UNIFIED.txtNifi
- [20230403]學習UNIFIED audit--驗證清理AUDSYS.AUD$UNIFIED.txtNifi
- [20210420]ORA-00904 REF invalid identifier 19c dba_obj_audit_opts.txtIDEOBJ
- [20211022]ORA-00904 REF invalid identifier 19c dba_obj_audit_opts(補充).txtIDEOBJ
- [20230301]學習UNIFIED audit-移動AUDSYS.AUD$UNIFIED到別的表空間.txtNifi
- ORACLE基礎之oracle鎖(oracle lock mode)詳解Oracle
- [Oracle]Oracle良性SQL建議OracleSQL
- cx_Oracle 連線 OracleOracle
- 【Oracle】Oracle logminer功能介紹Oracle
- OracleOracle
- Oracle案例12——NBU Oracle恢復Oracle
- Oracle vs PostgreSQL DBA(21)- Oracle VPDOracleSQL