Oracle Database Audit and Privilege Management
Classified in Mathematics
Written on in
English with a size of 4.08 KB
Revoking Public Privileges
To identify and revoke public privileges, use the following query:
SQL> SELECT table_name FROM dba_tab_privs WHERE owner='SYS' AND privilege = 'EXECUTE' AND grantee='PUBLIC' AND table_name LIKE 'UTL%';Users with DBA Role
SQL> SELECT grantee FROM dba_role_privs WHERE granted_role = 'DBA';Users with SYSDBA and SYSOPER Privileges
SQL> SELECT * FROM V$PWFILE_USERS;Audit Parameters and Session Auditing
Check the current audit parameters:
SHOW PARAMETER AUDIT_FILE_DEST || AUDIT_SYS_OPERATIONS || AUDIT_TRAIL;Common Audit Commands:
SQL> AUDIT session;SQL> AUDIT session by user;SQL> AUDIT TABLE BY hr WHENEVER NOT SUCCESSFUL;SQL> AUDIT DROP ANY TABLE BY hr BY SESSION;SQL> AUDIT UPDATE ON hr.employees BY ACCESS;SQL> AUDIT network;
Failed Connection Attempts
Query to identify failed login attempts in the last 7 days:
SELECT * FROM DBA_AUDIT_SESSION WHERE ACTION_NAME ='LOGON' AND NVL(RETURNCODE,0) != 0 AND TIMESTAMP BETWEEN (SYSTIMESTAMP - 7) AND SYSTIMESTAMP ORDER BY timestamp DESC;View All Audit Views
SELECT view_name FROM dba_views WHERE view_name LIKE '%AUDIT%' ORDER BY view_name;Value-Based Auditing
Example of a trigger for value-based auditing:
CREATE OR REPLACE TRIGGER mi_disparador
AFTER UPDATE OF salary ON hr.employees
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :old.salary != :new.salary THEN
INSERT INTO audit_employees
VALUES (sys_context('userenv','os_user'), sysdate, sys_context('userenv','ip_address'), :new.employee_id, 'salary', :old.salary, :new.salary);
END IF;
END;Fine-Grained Auditing (FGA) Policy
dbms_fga.add_policy (
object_schema=>'hr',
object_name=>'employees',
policy_name=>'auditoria_sueldos_empleados',
audit_condition=>'salary>30000',
audit_column=>'salary',
handler_schema=>'USER_MAIL',
handler_module=>'PR_ENVIA_MAIL',
enable=>true,
statement_types=>'select',
audit_trail=> DBMS_FGA.DB,
audit_column_opts=> DBMS_FGA.ANY_COLUMNS
);Tablespace Management for Auditing
View Tablespace
SELECT table_name, tablespace_name FROM dba_tables WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name;Move Tablespace Location
BEGIN
SYS.DBMS_AUDIT_MGMT.set_audit_trail_location(
audit_trail_type => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
audit_trail_location_value => 'TS_AUDIT'
);
END;Create New Tablespace
CREATE TABLESPACE TS_AUDIT DATAFILE '/home/oracle/app/oracle/oradata/eps1/audit01.dbf' SIZE 100M AUTOEXTEND ON NEXT 10M;Audit Trail Maintenance
Initialization and Cleanup
BEGIN
SYS.DBMS_AUDIT_MGMT.init_cleanup(
audit_trail_type => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
default_cleanup_interval => 24 /* hours */
);
END;BEGIN
SYS.DBMS_AUDIT_MGMT.set_last_archive_timestamp(
audit_trail_type => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
last_archive_time => SYSTIMESTAMP-5
);
END;Maximum Archive Age
SELECT * FROM dba_audit_mgmt_last_arch_ts;Manual Cleanup
BEGIN
SYS.DBMS_AUDIT_MGMT.clean_audit_trail(
audit_trail_type => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
use_last_arch_timestamp => TRUE
);
END;Scheduled Cleanup Job
BEGIN
SYS.DBMS_AUDIT_MGMT.create_purge_job(
audit_trail_type => SYS.DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
audit_trail_purge_interval => 24,
audit_trail_purge_name => 'JOB_AUDITORIA',
use_last_arch_timestamp => TRUE
);
END;