Enable standard database auditing and unified auditing

Um usuário ter o privilégio de ver ou modificar certos dados em um banco, não significa que ele deve fazer isso, ou pelo menos deve-se manter um registro do que foi feito. Isso é o que se chama de audit.

Nesse post iremos ver dois modos de auditar o que esta acontecedo no database. Utilizando o antigo Standard Database Auditing e o novo Unified Auditing que veio na versão 12c.

Vamos começar com o antigo. o Standard Database Auditing.

Existe algumas atividades que sempre serão auditadas, ou seja, serão armazenada informações sobre essas operações. Elas incluem informações de startup e shutdown, logins como SYSDBA ou SYSOPER e também qualquer ação realizada como SYSDBA ou SYSOPER.

Esses registros ficarão armazenados em arquivos no Sistema Operacional. O caminho padrão desses arquivos é o diretório $ORACLE_BASE/admin/$ORACLE_SID/adump ou pode-se alterar esse local alterando o parâmetro do Oracle AUDIT_FILE_DEST.

Vamos fazer um teste. Vamos logar como SYSDBA, realizar um startup, fazer uma consulta e depois um shutdown, e vamos ver os arquivos criados no nosso diretório. Antes de realizar essas operações, eu apaguei todos os arquivos anteriores para ficar mais fácil visualizar o nosso teste.

$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Thu Jul 25 09:59:22 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1543503872 bytes
Fixed Size                  8621040 bytes
Variable Size             939525136 bytes
Database Buffers          587202560 bytes
Redo Buffers                8155136 bytes
Database mounted.
Database opened.
SQL> SELECT SYSDATE FROM DUAL;

SYSDATE
---------
25-JUL-19

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
$ ll -lhtr
total 20K
-rw-r----- 1 oracle oinstall  841 Jul 25 09:59 orcl_ora_29927_20190725095923486229143795.aud
-rw-r----- 1 oracle oinstall  875 Jul 25 09:59 orcl_ora_29927_20190725095949089420143795.aud
-rw-r----- 1 oracle oinstall 1.8K Jul 25 09:59 orcl_ora_30026_20190725095949112761143795.aud
-rw-r----- 1 oracle oinstall 2.9K Jul 25 10:00 orcl_ora_30037_20190725095953947311143795.aud
-rw-r----- 1 oracle oinstall  841 Jul 25 10:01 orcl_ora_30377_20190725100116415515143795.aud
$ cat orcl_ora_29927_20190725095923486229143795.aud
Audit file /u01/oracle/app/oracle/admin/orcl/adump/orcl_ora_29927_20190725095923486229143795.aud
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /u01/oracle/app/oracle/product/12.2.0/dbhome_1
System name:    Linux
Node name:      oel76-lab1
Release:        4.14.35-1902.3.1.el7uek.x86_64
Version:        #2 SMP Mon Jun 24 21:25:29 PDT 2019
Machine:        x86_64
Storage:        ?
Instance name: orcl
Redo thread mounted by this instance: 0 <none&gt;
Oracle process number: 0
Unix process pid: 29927, image:

Thu Jul 25 09:59:23 2019 -03:00
LENGTH : '228'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[0] ''
SESSIONID:[0] ''
USERHOST:[0] ''
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'

[oracle@oel76-lab1 adump]$ cat orcl_ora_29927_20190725095949089420143795.aud
Audit file /u01/oracle/app/oracle/admin/orcl/adump/orcl_ora_29927_20190725095949089420143795.aud
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /u01/oracle/app/oracle/product/12.2.0/dbhome_1
System name:    Linux
Node name:      oel76-lab1
Release:        4.14.35-1902.3.1.el7uek.x86_64
Version:        #2 SMP Mon Jun 24 21:25:29 PDT 2019
Machine:        x86_64
Instance name: orcl
Redo thread mounted by this instance: 0 <none&gt;
Oracle process number: 299
Unix process pid: 29927, image: oracle@oel76-lab1 (TNS V1-V3)

Thu Jul 25 09:59:49 2019 -03:00
LENGTH : '242'
ACTION :[7] 'STARTUP'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[7] 'UNKNOWN'
STATUS:[1] '0'
DBID:[0] ''
SESSIONID:[1] '0'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '138'

[oracle@oel76-lab1 adump]$ cat orcl_ora_30026_20190725095949112761143795.aud
Audit file /u01/oracle/app/oracle/admin/orcl/adump/orcl_ora_30026_20190725095949112761143795.aud
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /u01/oracle/app/oracle/product/12.2.0/dbhome_1
System name:    Linux
Node name:      oel76-lab1
Release:        4.14.35-1902.3.1.el7uek.x86_64
Version:        #2 SMP Mon Jun 24 21:25:29 PDT 2019
Machine:        x86_64
Instance name: orcl
Redo thread mounted by this instance: 0 <none&gt;
Oracle process number: 35
Unix process pid: 30026, image: oracle@oel76-lab1 (TNS V1-V3)

Thu Jul 25 09:59:49 2019 -03:00
LENGTH : '250'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[0] ''
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'

Thu Jul 25 09:59:49 2019 -03:00
LENGTH : '524'
ACTION :[281] 'SELECT DECODE(null,'','Total System Global Area','') NAME_COL_PLUS_SHOW_SGA,   SUM(VALUE), DECODE (null,'', 'bytes','') units_col_plus_show_sga FROM V$SGA    UNION ALL    SELECT NAME NAME_COL_PLUS_SHOW_SGA , VALUE,    DECODE (null,'', 'bytes','') units_col_plus_show_sga FROM V$SGA'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[0] ''
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[1] '3'

Thu Jul 25 09:59:53 2019 -03:00
LENGTH : '276'
ACTION :[22] 'ALTER DATABASE   MOUNT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1522985886'
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[2] '35'

[oracle@oel76-lab1 adump]$ cat orcl_ora_30037_20190725095953947311143795.aud
Audit file /u01/oracle/app/oracle/admin/orcl/adump/orcl_ora_30037_20190725095953947311143795.aud
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /u01/oracle/app/oracle/product/12.2.0/dbhome_1
System name:    Linux
Node name:      oel76-lab1
Release:        4.14.35-1902.3.1.el7uek.x86_64
Version:        #2 SMP Mon Jun 24 21:25:29 PDT 2019
Machine:        x86_64
Instance name: orcl
Redo thread mounted by this instance: 1
Oracle process number: 36
Unix process pid: 30037, image: oracle@oel76-lab1 (TNS V1-V3)

Thu Jul 25 09:59:53 2019 -03:00
LENGTH : '261'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1522985886'
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'

Thu Jul 25 10:00:04 2019 -03:00
LENGTH : '273'
ACTION :[19] 'ALTER DATABASE OPEN'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1522985886'
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[2] '35'

Thu Jul 25 10:00:34 2019 -03:00
LENGTH : '277'
ACTION :[24] 'SELECT SYSDATE FROM DUAL'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1522985886'
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[1] '3'

Thu Jul 25 10:00:44 2019 -03:00
LENGTH : '399'
ACTION :[145] 'SELECT SYS_CONTEXT('USERENV','CDB_NAME'),    SYS_CONTEXT('USERENV','CON_NAME'),    SYS_CONTEXT('USERENV','IS_APPLICATION_ROOT')    FROM SYS.DUAL'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1522985886'
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[1] '3'

Thu Jul 25 10:00:53 2019 -03:00
LENGTH : '281'
ACTION :[27] 'ALTER DATABASE CLOSE NORMAL'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[10] '1522985886'
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[2] '35'

Thu Jul 25 10:00:56 2019 -03:00
LENGTH : '266'
ACTION :[23] 'ALTER DATABASE DISMOUNT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[0] ''
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[2] '35'

Thu Jul 25 10:00:56 2019 -03:00
LENGTH : '262'
ACTION :[18] 'SHUTDOWN IMMEDIATE'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[0] ''
SESSIONID:[10] '4294967295'
USERHOST:[10] 'oel76-lab1'
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '139'

[oracle@oel76-lab1 adump]$ cat orcl_ora_30377_20190725100116415515143795.aud
Audit file /u01/oracle/app/oracle/admin/orcl/adump/orcl_ora_30377_20190725100116415515143795.aud
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Build label:    RDBMS_12.2.0.1.0_LINUX.X64_170125
ORACLE_HOME:    /u01/oracle/app/oracle/product/12.2.0/dbhome_1
System name:    Linux
Node name:      oel76-lab1
Release:        4.14.35-1902.3.1.el7uek.x86_64
Version:        #2 SMP Mon Jun 24 21:25:29 PDT 2019
Machine:        x86_64
Storage:        ?
Instance name: orcl
Redo thread mounted by this instance: 0 <none&gt;
Oracle process number: 0
Unix process pid: 30377, image:

Thu Jul 25 10:01:16 2019 -03:00
LENGTH : '228'
ACTION :[7] 'CONNECT'
DATABASE USER:[1] '/'
PRIVILEGE :[6] 'SYSDBA'
CLIENT USER:[6] 'oracle'
CLIENT TERMINAL:[5] 'pts/0'
STATUS:[1] '0'
DBID:[0] ''
SESSIONID:[0] ''
USERHOST:[0] ''
CLIENT ADDRESS:[0] ''
ACTION NUMBER:[3] '100'

[oracle@oel76-lab1 adump]$

Perceba que foram criados 5 arquivos de audit. Cada um tem um resumo sobre o ambiente, como versão do Oracle, a data com hora, nome do nó e etc. Logo após temos o que foi auditado. No primeiro arquivo temos apenas uma informação, que foi a conexão como SYSDBA. No segundo arquivo temos a informação do STARTUP como SYSDBA. No terceiro arquivo ainda temos algumas informações relativas ao startup, como a conexão de sysdba, o select que ele faz internamente para pegar alguns dados da instância com os tamanhos das estruturas da memória que é exibida durante o startup e o alter database para montar a base.

No quarto arquivo, que é o maior, temos novamente a informação da conexão como SYSDBA, o ALTER DATABASE OPEN, finalizando assim o startup. Logo após temos a consulta que foi realizada e que também foi auditada, o select sysdate from dual. E para finalizar esse penúltimo arquivo, temos as informações referentes ao shutdown, incluindo as operações de close e dismount.

Para finalizar, temos o último arquivo, no qual continuamos conectado como Oracle.

Um parâmetro importante para isso, é o parâmetro AUDIT_SYS_OPERATIONS. Se estiver configurado com TRUE, as operações de SQL, TOP-LEVEL, serão auditadas e as informações dessas instruções serão armazenadas também. Que foi o que aconteceu no exemplo acima. Nos arquivos de auditoria tem algumas consultas SQL. Se esse parâmetro estivesse com o valor FALSE, essas consultas não teriam sido auditadas. Mas o restante das operações de logon, startup e shutdown sim.

Fora a auditoria obrigatória, que sempre será armazenada no SO, temos também como ativar a auditoria para usuários específicos e/ou operações especificas. Também, podemos direcionar a auditoria para ser armazenada dentro do banco, e não fora. Isso pode ser feito com a ajuda do parâmetro AUDIT_TRAIL, que tem as seguintes opções de valores:

  • DB – Toda as auditorias serão salvas na tabela SYS.AUD$ ao invés de ser armazenadas no sistema operacional. Mas, lembre-se, que a auditoria de shutdown, startup, login como SYSDBA e SYSOPER, sempre serão salvas no S.O. independente do valor do parâmetro AUDIT_TRAIL.
  • DB, EXTENDED – Mesmo efeito que o valor DB mencionado acima, mas também irá popular as colunas SQLBIND e SQLTEXT.
  • OS – Direciona os registros de auditoria para o sistema operacional, na forma já vista no exemplo acima.
  • XML – Escreve no sistema operacional também, mas no formato XML.
  • XML, EXTENDED – Mesmo que XML, mas inclui as informações de SQLBIND e SQLTEXT.
  • NONE – Desabilita a auditoria. Lembrando que certas operações já descritas anteriormente serão auditadas mesmo com o parâmetro em NONE.

Vejamos agora como habilitar a auditoria em elementos específicos do nosso banco. Vamos começar com a auditoria em statement e objects. Essa auditoria pode ser realizada somente quando a operação é bem sucedida(WHENEVER SUCCESSFUL), ou não sucedida(teve um erro)(WHENEVER NOT SUCCESSFUL), ou ambos(Quando se omite ambas as cláusulas). Veja um exemplo:

$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Mon Jul 29 11:08:02 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> CREATE USER TERCIOCOSTA IDENTIFIED BY oracle;

User created.

SQL> GRANT DBA TO terciocosta;

Grant succeeded.

SQL> AUDIT CREATE TABLE;

Audit succeeded.

SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
$ sqlplus terciocosta/oracle

SQL*Plus: Release 12.2.0.1.0 Production on Mon Jul 29 11:11:27 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Last Successful login time: Mon Jul 29 2019 11:09:59 -03:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> CREATE TABLE audit_teste(a number);

Table created.

SQL>

SQL> SELECT ad.os_username,                                                                                                                                     
            ad.username,                                                                                                                                        
            ad.userhost,                                                                                                                                        
            ad.terminal,                                                                                                                                        
            ad.timestamp,                                                                                                                                       
            ad.owner,                                                                                                                                          
            ad.obj_name,                                                                                                                                        
            ad.action,                                                                                                                                          
            ad.action_name                                                                                                                                     
     from   DBA_AUDIT_TRAIL ad;
   OS_USERNAME       USERNAME      USERHOST    TERMINAL    TIMESTAMP          OWNER       OBJ_NAME    ACTION     ACTION_NAME
______________ ______________ _____________ ___________ ____________ ______________ ______________ _________ _______________
oracle         TERCIOCOSTA    oel76-lab1    pts/0       29/07/19     TERCIOCOSTA    AUDIT_TESTE            1 CREATE TABLE
oracle         TERCIOCOSTA    oel76-lab1    pts/0       29/07/19     TERCIOCOSTA    AUDIT_TESTE            1 CREATE TABLE

Veja que foi ativada a auditoria para quem executar um CREATE TABLE. O usuário terciocosta criou uma tabela e depois podemos ver o registro de auditoria consultando a view DBA_AUDIT_TRAIL, visto que o parâmetro AUDIT_TRAIL esta com o valor DB.

Podemos auditar além dos comandos DDL os comandos DML e espcificar bem qual objeto será auditado. Exemplo:

AUDIT SELECT ON HR.REGIONS;

Então, todos os SELECTS na tabela HR.REGIONS irão criar registros de auditoria.

Temos diversos tipos de auditorias com diversas opções, como auditar apenas para alguns usuários, se teve sucesso ou não e etc. Para verificar todas as opções possíveis, recomendo verificar a documentação oficial da Oracle.

Agora, vamos falar um pouco sobre o Unified Auditing que foi introduzido na versão 12c do Oracle, criando uma nova área na memória para armazenar essas informações, antes de gravar em disco, uma espécie de buffer, Melhorando assim a performance de sistemas com a auditoria ativada.

Com o Unified Auditing, o audit trail captura informações de auditoria de diversas fontes.

  • AUDIT,
  • Fine-grained audit
  • RAC Application Security
  • RMAN
  • Oracle Database Vault
  • Oracle Label Security
  • Oracle Data Mining
  • Oracle Data Pump
  • Oracle SQL*Loader Direct Load

Todas essas informações são unificadas, e são gravadas na tabela AUDSYS e podem ser acessadas através da view UNIFIED_AUDIT_TRAIL. Então, ao invés de ficar olhando em diferentes locais para encontrar informações de auditoria de diferentes fontes e formatos, podemos verificar apenas um local, a view unifica todas as informações. Também, com o Unified Auditing, podemos criar as próprias políticas de auditoria ou já utilizar algumas pré-existentes. Para verificar as políticas, poderá consultar a tabela AUDIT_UNIFIED_POLICIES

Com isso, gerenciar as informações de auditoria ficou bem mais fácil e a performance também.

Para verificar se o Unified Auditing esta ativo execute a seguinte query:

SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';

O default dos bancos é estar no modo mixed, no qual introduz os benefícios desse novo modo de auditoria e possibilita você ir migrando as suas aplicações para esse novo ambiente enquanto ainda funciona no modo antigo. Depois, pode ir para o pure unified auditing.

O Unified Auditing usa o diretório $ORACLE_BASE/audit para a localização dos arquivos salvos no sistema operacional.

Para ativar o unified Auditing, é necessário para o banco, pois precisamos fazer um relink do oracle com a opção uniaud_on.

$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 30 11:50:44 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
[]$ lsnrctl stop

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 30-JUL-2019 11:52:03

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel76-lab1)(PORT=1521)))
The command completed successfully
$ cd $ORACLE_HOME/rdbms/lib
$ make -f ins_rdbms.mk uniaud_on ioracle
/usr/bin/ar d /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/libknlopt.a kzanang.o
/usr/bin/ar cr /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/libknlopt.a /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/kzaiang.o
chmod 755 /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin

 - Linking Oracle
rm -f /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/oracle
/u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/orald  -o /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/oracle -m64 -z noexecstack -Wl,--disable-new-dtags -L/u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/ -L/u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/ -L/u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/stubs/   -Wl,-E /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/opimai.o /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/ssoraed.o /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/ttcsoi.o -Wl,--whole-archive -lperfsrv12 -Wl,--no-whole-archive /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/nautab.o /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/naeet.o /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/naect.o /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/naedhs.o /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/config.o  -ldmext -lserver12 -lodm12 -lofs -lcell12 -lnnet12 -lskgxp12 -lsnls12 -lnls12  -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12 -lclient12  -lvsn12 -lcommon12 -lgeneric12 -lknlopt `if /usr/bin/ar tv /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/libknlopt.a | grep xsyeolap.o > /dev/null 2>&1 ; then echo "-loraolap12" ; fi` -lskjcx12 -lslax12 -lpls12  -lrt -lplp12 -ldmext -lserver12 -lclient12  -lvsn12 -lcommon12 -lgeneric12 `if [ -f /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/libavserver12.a ] ; then echo "-lavserver12" ; else echo "-lavstub12"; fi` `if [ -f /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/libavclient12.a ] ; then echo "-lavclient12" ; fi` -lknlopt -lslax12 -lpls12  -lrt -lplp12 -ljavavm12 -lserver12  -lwwg  `cat /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/ldflags`    -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lngsmshd12 -lnro12 `cat /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/ldflags`    -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lngsmshd12 -lnnzst12 -lzt12 -lztkg12 -lmm -lsnls12 -lnls12  -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12 -lztkg12 `cat /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/ldflags`    -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lngsmshd12 -lnro12 `cat /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/ldflags`    -lncrypt12 -lnsgr12 -lnzjs12 -ln12 -lnl12 -lngsmshd12 -lnnzst12 -lzt12 -lztkg12   -lsnls12 -lnls12  -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12 `if /usr/bin/ar tv /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/libknlopt.a | grep "kxmnsd.o" > /dev/null 2>&1 ; then echo " " ; else echo "-lordsdo12 -lserver12"; fi` -L/u01/oracle/app/oracle/product/12.2.0/dbhome_1/ctx/lib/ -lctxc12 -lctx12 -lzx12 -lgx12 -lctx12 -lzx12 -lgx12 -lordimt12 -lclsra12 -ldbcfg12 -lhasgen12 -lskgxn2 -lnnzst12 -lzt12 -lxml12 -lgeneric12 -locr12 -locrb12 -locrutl12 -lhasgen12 -lskgxn2 -lnnzst12 -lzt12 -lxml12 -lgeneric12  -lgeneric12 -lorazip -loraz -llzopro5 -lorabz2 -lipp_z -lipp_bz2 -lippdcemerged -lippsemerged -lippdcmerged  -lippsmerged -lippcore  -lippcpemerged -lippcpmerged  -lsnls12 -lnls12  -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12 -lsnls12 -lunls12  -lsnls12 -lnls12  -lcore12 -lsnls12 -lnls12 -lcore12 -lsnls12 -lnls12 -lxml12 -lcore12 -lunls12 -lsnls12 -lnls12 -lcore12 -lnls12 -lasmclnt12 -lcommon12 -lcore12  -laio -lons  -lfthread12   `cat /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/sysliblist` -Wl,-rpath,/u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib -lm    `cat /u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib/sysliblist` -ldl -lm   -L/u01/oracle/app/oracle/product/12.2.0/dbhome_1/lib `test -x /usr/bin/hugeedit -a -r /usr/lib64/libhugetlbfs.so && test -r /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/shugetlbfs.o && echo -Wl,-zcommon-page-size=2097152 -Wl,-zmax-page-size=2097152 -lhugetlbfs`
test ! -f /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/oracle || (\
   mv -f /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/oracle /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/oracleO &&\
   chmod 600 /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/oracleO )
mv /u01/oracle/app/oracle/product/12.2.0/dbhome_1/rdbms/lib/oracle /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/oracle
chmod 6751 /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/oracle
$ lsnrctl start

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 30-JUL-2019 12:17:47

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

Starting /u01/oracle/app/oracle/product/12.2.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /u01/oracle/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/oracle/app/oracle/diag/tnslsnr/oel76-lab1/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel76-lab1)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=oel76-lab1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.2.0.1.0 - Production
Start Date                30-JUL-2019 12:17:47
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/oracle/app/oracle/product/12.2.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/oracle/app/oracle/diag/tnslsnr/oel76-lab1/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=oel76-lab1)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 30 12:17:51 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area 1543503872 bytes
Fixed Size                  8621040 bytes
Variable Size             939525136 bytes
Database Buffers          587202560 bytes
Redo Buffers                8155136 bytes
Database mounted.
Database opened.
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';

VALUE
----------------------------------------------------------------
TRUE

SQL>

O processo não é demorado e logo após verificamos que esta ativo o Unified Auditing. Como já foi dito, podemos utilizar algumas políticas que já vem com o Oracle, que podemos verificar na tabela AUDIT_UNIFIED_POLICIES ou criar políticas de acordo com a necessidade.

Vejamos como criar uma política, habilitar e testar.

SQL> CREATE AUDIT POLICY terciocosta_audit_pol ACTIONS SELECT ON hr.employees;

Audit policy created.

SQL> AUDIT POLICY terciocosta_audit_pol EXCEPT hr;

Audit succeeded.

SQL> SELECT audit_option,
  2         object_name
  3  FROM   AUDIT_UNIFIED_POLICIES
  4  WHERE  policy_name='TERCIOCOSTA_AUDIT_POL';

AUDIT_OPTION                            OBJECT_NAME
----------------------------------------------------------------------------
SELECT                                  EMPLOYEES

SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
[oracle@oel76-lab1 lib]$ sqlplus terciocosta/oracle

SQL*Plus: Release 12.2.0.1.0 Production on Tue Jul 30 12:34:46 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

Last Successful login time: Mon Jul 29 2019 12:02:50 -03:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select first_name from hr.employees FETCH FIRST 1 ROW ONLY;

FIRST_NAME
--------------------
Ellen

SQL> set pages 100
SQL> col dbusername format A8
SQL> col action_name format A8
SQL> col "DATE" format A20
SQL> col  system_privilege_used format A18
SQL> col unified_audit_policies format a22
SQL> select UNIFIED_AUDIT_POLICIES, DBUSERNAME, ACTION_NAME,
       SYSTEM_PRIVILEGE_USED,
       to_char(EVENT_TIMESTAMP,'DD-MON-YY HH:MI') "DATE"
from unified_audit_trail
where  unified_audit_policies = 'TERCIOCOSTA_AUDIT_POL'  2    3    4    5  ;

UNIFIED_AUDIT_POLICIES DBUSERNA ACTION_N SYSTEM_PRIVILEGE_U DATE
---------------------- -------- -------- ------------------ --------------------
TERCIOCOSTA_AUDIT_POL  TERCIOCO SELECT   SELECT ANY TABLE   30-JUL-19 12:35
                       STA


SQL>

Veja como criar uma política é simples, e para habilitar também. E verificar os registros da auditoria é ainda bem mais fácil do que no Standard Auditing.

Mas, a auditoria pode ficar bem avançada com as criações de regras cada vez mais especificas. Pode-se auditar diversos tipos de ações no banco. Por isso recomendo a leitura da documentação, pois seria impossível abranger tudo aqui nesse post.

Anúncios

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Marcado com: , , , , , , ,
Publicado em Administração, Audit

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.

Esse Blog é reconhecido pela
Certificações
Sou articulista

Clique para seguir este blog e receber notificações via email de novos posts.

Tércio Costa

Tércio Costa

Meu nome é Tércio Costa, sou formado em Ciências da Computação pela UFPB, tenho a certificação Oracle SQL Expert e OCP PL/SQL, mantendo um blog reconhecido pela OTN(oraclepress.wordpress.com), no qual também publico artigos técnicos no portal OTN, no portal http://www.profissionaloracle.com.br/gpo e na revista SQL Magazine. Além de tudo isto sou um Oracle ACE Associate por estar sempre contribuindo para a comunidade com um bom nível de expertise.

Links Pessoais

Serviços verificados

Visualizar Perfil Completo →

Total de Visualizações da Página
  • 138.077 Visualizações
%d blogueiros gostam disto: