Administración Básica de Oracle9i PRACTICAS. AUDITORÍA. 1. Ver
Transcripción
Administración Básica de Oracle9i PRACTICAS. AUDITORÍA. 1. Ver
Administración Básica de Oracle9i PRACTICAS. AUDITORÍA. 1. Ver la descripción de las vistas ALL_DEF_AUDIT_OPTS, DBA_AUDIT_OBJECT, DBA_AUDIT_SESSION, DBA_AUDIT_STATEMENT, DBA_AUDIT_TRAIL, DBA_OBJ_AUDIT_OPTS, DBA_PRIV_AUDIT_OPTS, y DBA_STMT_AUDIT_OPTS. Averiguar el significado de cada uno de los campos usando la documentación en línea. SQL> desc ALL_DEF_AUDIT_OPTS Nombre ¿Nulo? ----------------------------------------- -------ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE Tipo --------------VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) VARCHAR2(3) ... 2. Ver la descripción de la vista SYS.AUD$. SQL> desc sys.aud$ Name Null? Type -----------------------------------------------------------------SESSIONID NOT NULL NUMBER ENTRYID NOT NULL NUMBER STATEMENT NOT NULL NUMBER TIMESTAMP# NOT NULL DATE USERID VARCHAR2(30) USERHOST VARCHAR2(128) TERMINAL VARCHAR2(255) ACTION# NOT NULL NUMBER RETURNCODE NOT NULL NUMBER OBJ$CREATOR VARCHAR2(30) OBJ$NAME VARCHAR2(128) AUTH$PRIVILEGES VARCHAR2(16) 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 VARCHAR2(255) © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 1 Administración Básica de Oracle9i SPARE2 OBJ$LABEL SES$LABEL PRIV$USED SESSIONCPU NUMBER RAW(255) RAW(255) NUMBER NUMBER 3. Comprobar si esta habilitada la auditoría en la base de datos. Habilitar la auditoría en la base de datos en caso de que no este. SQL> show parameters audit_trail NAME TYPE VALUE --------------------------------------------------------audit_trail string NONE Se debe parar la base de datos, editar el fichero de parametros de inicializacion, init<bd>.ora, añadiendo la linea "audit_trail=db", y volver a arrancar la base de datos. 4. Comprobar que usuarios de base de datos tienen asignados los privilegios AUDIT SYSTEM y AUDIT ANY. SQL> connect system Enter password: Connected. SQL> select * from dba_sys_privs where privilege ='AUDIT ANY'; GRANTEE -----------------------------DBA IMP_FULL_DATABASE SQL> PRIVILEGE ---------------------------------------AUDIT ANY AUDIT ANY ADM --YES NO select * from dba_sys_privs where privilege ='AUDIT SYSTEM'; GRANTEE PRIVILEGE ADM ------------------------------ ---------------------------------------- --DBA AUDIT SYSTEM YES 5. Auditar todas las conexiones exitosas y fallidas a la base de datos. SQL> audit session; Audit succeeded. 6. Abrir una sesión a la base de datos como usuario “SYSTEM” y como usuario “prueba01”. Comprobar que información se ha guardado en la auditoría como consecuencia de las operaciones anteriores (consultar la vista DBA_AUDIT_TRAIL). SQL> select substr(os_username,1,10) usuario_so, substr(username,1,12) usuario, to_char(timestamp,'dd-mm-yyy hh24:mi:ss') tiempo_conexion, to_char (logoff_time,'dd-mm-yyyy hh24:mi:ss') tiempo_desconexion from dba_audit_trail order by username,timestamp,logoff_time; © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 2 Administración Básica de Oracle9i USUARIO_SO ---------oracle oracle USUARIO -----------PRUEBA01 SYSTEM TIEMPO_CONEXION TIEMPO_DESCONEXION ------------------ ------------------29-11-004 11:53:50 29-11-004 11:53:44 29-11-2004 11:53:50 7. Auditar las conexiones exitosas y fallidas a la base de datos de los usuarios “prueba01” y “prueba02”. SQL> audit session by prueba01, prueba02; Audit succeeded. 8. Conectarse a la base de datos como usuario “prueba02” introduciendo una clave errónea. Comprobar el apunte realizado en la auditoría del sistema (consultar la vista DBA_AUDIT_SESSION). SQL> select substr(os_username,1,10) usuario_so, substr(username,1,12) usuario, to_char(timestamp,'dd-mm-yyy hh24:mi:ss') tiempo_conexion, to_char (logoff_time,'dd-mm-yyyy hh24:mi:ss') tiempo_desconexion from dba_audit_session where username='PRUEBA02' order by username,timestamp,logoff_time USUARIO_SO USUARIO TIEMPO_CONEXION TIEMPO_DESCONEXION ---------- ------------ ------------------ ------------------oracle PRUEBA02 29-11-004 11:55:37 9. Auditar el uso de SELECT TABLE, DELETE TABLE, UPDATE TABLE e INSERT TABLE en cualquier caso (fallido o no) y por sentencia individual. Comprobar las opciones activas de auditoría (vista DBA_STMT_AUDIT_OPTS). SQL> audit select table, delete table, update table, insert table by access; Audit succeeded. SQL> select user_name usuario, audit_option opcion, success, failure from DBA_STMT_AUDIT_OPTS order by user_name USUARIO OPCION SUCCESS FAILURE -----------------------------------------------------------PRUEBA01 CREATE SESSION BY ACCESS BY ACCESS PRUEBA02 CREATE SESSION BY ACCESS BY ACCESS CREATE SESSION BY ACCESS BY ACCESS SELECT TABLE BY ACCESS BY ACCESS INSERT TABLE BY ACCESS BY ACCESS UPDATE TABLE BY ACCESS BY ACCESS DELETE TABLE BY ACCESS BY ACCESS 7 rows selected. 10. Conectarse como usuario “prueba01”. Comprobar si se ha creado la tabla “codigos_notas” en el "tablespace" ACADEMO, en caso contrario creadla. CREATE TABLE CODIGOS_NOTAS © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 3 Administración Básica de Oracle9i (CODIGO varchar2(3), DESCRIPCION varchar2(20)) TABLESPACE ACADEMO STORAGE (INITIAL 64K NEXT 64K MINEXTENTS 3 MAXEXTENTS 10); Otorgar privilegios para consultar, insertar, actualizar y borrar registros de la tabla “codigos_notas” al usuario "prueba02". Conectarse como usuario “prueba02” y realizar las siguientes operaciones: - Seleccionar todos los registros de la tabla “codigos_notas”. Insertar en la tabla “codigos_notas” los siguientes registros: ‘0’, ‘NO PRESENTADO’ ‘1’, ‘APROBADO’ Consultar los registros de auditoría generados para las operaciones anteriores (vista DBA_AUDIT_OBJECT). SQL> connect prueba01 Enter password: Connected. SQL> 2 3 4 5 6 7 8* CREATE TABLE CODIGOS_NOTAS (CODIGO varchar2(3), DESCRIPCION varchar2(20)) TABLESPACE ACADEMO STORAGE (INITIAL 64K NEXT 64K MINEXTENTS 3 MAXEXTENTS 10) Table created. SQL> grant select, insert, update, delete on codigos_notas to prueba02; Grant succeeded. SQL> connect prueba02 Enter password: Connected. SQL> select * from prueba01.codigos_notas; no rows selected SQL> insert into prueba01.codigos_notas values ('0','NO PRESENTADO'); 1 row created. SQL> insert into prueba01.codigos_notas values ('1','APROBADO'); 1 row created. SQL> commit; Commit complete. © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 4 Administración Básica de Oracle9i SQL> SQL> connect system Enter password: Connected. SQL> select substr(os_username,1,10) usuario_so, substr(username,1,12) usuario, to_char(timestamp,'dd-mm-yyy hh24:mi:ss') tiempo_conexion, to_char (logoff_time,'dd-mm-yyyy hh24:mi:ss') tiempo_desconexion from dba_audit_session where username='PRUEBA02' order by username,timestamp,logoff_time; USUARIO_SO ---------oracle oracle USUARIO -----------PRUEBA02 PRUEBA02 TIEMPO_CONEXION TIEMPO_DESCONEXION ------------------ ------------------29-11-004 11:55:37 29-11-004 12:08:54 29-11-2004 12:10:42 SQL> select substr(os_username,1,10) usuario_so, substr(username,1,12) usuario, to_char(timestamp,'dd-mm-yyy hh24:mi:ss') tiempo_conexion, substr (owner,1,10) propie, substr(obj_name,1,15) objeto, substr(action_name,1,10) accion from dba_audit_object where username='PRUEBA02' order by os_username,timestamp, owner,obj_name,action_name; USUARIO_SO USUARIO TIEMPO_CONEXION PROPIE OBJETO ACCION --------------------------------------------------------------------------oracle PRUEBA02 29-11-004 12:08:54 SYS DUAL SELECT oracle PRUEBA02 29-11-004 12:08:54 SYS DUAL SELECT oracle PRUEBA02 29-11-004 12:08:54 SYS DUAL SELECT oracle PRUEBA02 29-11-004 12:08:54 SYSTEM PRODUCT_PRIVS SELECT oracle PRUEBA02 29-11-004 12:08:54 SYSTEM PRODUCT_PRIVS SELECT oracle PRUEBA02 29-11-004 12:08:54 SYSTEM SQLPLUS_PRODUCT SELECT oracle PRUEBA02 29-11-004 12:08:54 SYSTEM SQLPLUS_PRODUCT SELECT oracle PRUEBA02 29-11-004 12:09:06 PRUEBA01 CODIGOS_NOTAS SELECT oracle PRUEBA02 29-11-004 12:09:19 PRUEBA01 CODIGOS_NOTAS INSERT oracle PRUEBA02 29-11-004 12:09:32 PRUEBA01 CODIGOS_NOTAS INSERT 11. Consultar las opciones por defecto de auditoría de objetos (ALL_DEF_AUDIT_OPTS). SQL> select * from all_def_audit_opts; ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE --- --- --- --- --- --- --- --- --- --- --- --- ---/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- -/- 12. Especificar las opciones de auditoría por defecto para los objetos creados en un futuro de forma que se registre información siempre que se produzca un “alter”, “grant”, “insert”, “update” o “delete”. SQL> audit alter, grant, insert, update, delete on default; Audit succeeded. SQL> select * from all_def_audit_opts; ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE --- --- --- --- --- --- --- --- --- --- --- --- --S/S -/- -/- S/S S/S -/- S/S -/- -/- -/- S/S -/- -/- © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 5 Administración Básica de Oracle9i El significado de cada una de las columnas es: -/-: No auditoria por defecto. S/-: Auditado cuando sea exitosa la operación. -/S: Auditado cuando sea fallida la operación. ALT AUD COM DEL GRA IND INS LOC REN SEL UPD REF EXE ... ... ... ... ... ... ... ... ... ... ... ... ... ALTER AUDIT COMMENT DELETE GRANT INDEX INSERT LOCK RENAME SELECT UPDATE REFERENCES EXECUTE 13. Desactivar la auditoría de las conexiones a la base de datos. SQL> select substr(user_name,1,12) usuario, privilege, success,failure from dba_priv_audit_opts order by user_name, privilege; USUARIO -----------PRUEBA01 PRUEBA02 PRIVILEGE ---------------------------------------CREATE SESSION CREATE SESSION ALTER ANY RULE CREATE ANY RULE CREATE SESSION DROP ANY RULE EXECUTE ANY RULE SUCCESS ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS FAILURE ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS 7 rows selected. SQL> noaudit session; Noaudit succeeded. SQL> select substr(user_name,1,12) usuario, privilege, success,failure from dba_priv_audit_opts order by user_name, privilege; USUARIO -----------PRUEBA01 PRUEBA02 PRIVILEGE ---------------------------------------CREATE SESSION CREATE SESSION ALTER ANY RULE CREATE ANY RULE DROP ANY RULE EXECUTE ANY RULE SUCCESS ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS FAILURE ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS BY ACCESS 6 rows selected. SQL> noaudit session by prueba01, prueba02; Noaudit succeeded. SQL> select substr(user_name,1,12) usuario, privilege, success,failure from dba_priv_audit_opts order by user_name, privilege; © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 6 Administración Básica de Oracle9i USUARIO PRIVILEGE ------------ ---------------------------------------ALTER ANY RULE CREATE ANY RULE DROP ANY RULE EXECUTE ANY RULE SUCCESS ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS FAILURE ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS 14. Desactivar la auditoría de uso de SELECT TABLE, DELETE TABLE, UPDATE TABLE e INSERT TABLE (activada en ejercicios anteriores). SQL> select substr(user_name,1,12) usuario, substr(audit_option, 1,15) opcion, success,failure from dba_stmt_audit_opts order by user_name, audit_option; USUARIO OPCION ------------ --------------DELETE TABLE INSERT TABLE SELECT TABLE UPDATE TABLE SUCCESS ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS FAILURE ---------BY ACCESS BY ACCESS BY ACCESS BY ACCESS SQL> noaudit select table, delete table, update table, insert table; Noaudit succeeded. SQL> select substr(user_name,1,12) usuario, substr(audit_option, 1,15) opcion, success,failure from dba_stmt_audit_opts order by user_name, audit_option; no rows selected 15. Activar la auditoría para cualquier operación de consulta, inserción o borrado que se efectué sobre la tabla “prueba01.codigos_notas”. SQL> audit select, insert, delete on prueba01.codigos_notas; Audit succeeded. SQL> select substr(owner,1,12),substr(OBJECT_NAME,1,12), substr (object_type,1,10), DEL, INS, SEL, UPD from dba_obj_audit_opts where owner='PRUEBA01' order by object_name, object_type; SUBSTR(OWNER -----------PRUEBA01 PRUEBA01 PRUEBA01 PRUEBA01 SUBSTR(OBJEC -----------CHEQUEAR_TAB CODIGOS CODIGOS_NOTA TABLAS_REVIS SUBSTR(OB --------PROCEDURE TABLE TABLE TABLE DEL ---/-/S/S -/- INS ---/-/S/S -/- SEL ---/-/S/S -/- UPD ---/-/-/-/- 16. Conectado como usuario “prueba01” realizar una consulta del contenido de la tabla “codigos_notas”. Consultar (DBA_AUDIT_OBJECT). los registros de auditoría generados SQL> connect prueba01 Introduzca su clave: Connected. © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 7 Administración Básica de Oracle9i SQL> select * from codigos_notas; COD --0 1 DESCRIPCION -------------------NO PRESENTADO APROBADO SQL> insert into codigos_notas values ('3','NOTABLE'); 1 row created. SQL> commit; SQL> connect system Introduzca su clave: Connected. SQL> select substr(username,1,10) usuario, to_char(timestamp,'dd-mm-yyyy hh24:mi:ss') fecha, substr(owner,1,10) prop, substr(obj_name,1,15) objeto, ses_actions from dba_audit_object where owner='PRUEBA01' order by timestamp USUARIO FECHA PROP OBJETO SES_ACTIONS -------------------------------------------------------------------------PRUEBA02 29-11-2004 12:09:06 PRUEBA01 CODIGOS_NOTAS PRUEBA02 29-11-2004 12:09:19 PRUEBA01 CODIGOS_NOTAS PRUEBA02 29-11-2004 12:09:32 PRUEBA01 CODIGOS_NOTAS PRUEBA01 02-12-2004 10:09:30 PRUEBA01 CODIGOS_NOTAS ------S--S------ SES_ACTIONS Resumen de sesion, una cadena de 16 caracteres, uno por cada tipo de accion de la lista ordenada ALTER, AUDIT, COMMENT, DELETE, GRANT, INDEX, INSERT, LOCK, RENAME, SELECT, UPDATE, REFERENCES, y EXECUTE. Las posicones 14, 15, y 16 estan reservadas para usos futuros. Los caracteres son - para ninguno, S para éxito, F para fallo y B para ambos. 17. Desactivar la auditoría del ejercicio 15. SQL> noaudit select, insert, delete on prueba01.codigos_notas; Noaudit succeeded. 18. Desactivar todas las opciones de auditoría de objetos que existen por defecto. SQL> noaudit all on default; Noaudit succeeded. 19. Comprobar las características de almacenamiento del “audit trail”. Borrar todos los registros de auditoría correspondientes a la tabla “prueba01.codigos_notas”. SQL> select substr(owner,1,10) prop,substr(table_name,1,8) tabla,substr (tablespace_name,1,10) espacio, INITIAL_EXTENT, © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 8 Administración Básica de Oracle9i NEXT_EXTENT,MIN_EXTENTS,MAX_EXTENTS table_name='AUD$'; PROP TABLA ESPACIO MAX_EXTENTS ---------- -------- -------------------SYS AUD$ SYSTEM 121 from dba_tables where INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS -------------- ----------- ----------- 10240 16384 1 20. Auditar cualquier cambio que se realice en el “audit trail”. SQL> AUDIT INSERT, UPDATE, DELETE ON SYS.AUD$ BY ACCESS; Audit succeeded. SQL> select substr(owner,1,12) prop,substr(OBJECT_NAME,1,12) objeto, substr(object_type,1,10) tipo, DEL, INS, SEL, UPD from dba_obj_audit_opts where owner='SYS' and OBJECT_NAME ='AUD$' order by object_name, object_type PROP OBJETO TIPO DEL INS SEL UPD ------------ ------------ --------- --- --- --- --SYS AUD$ TABLE A/A A/A -/- A/A 21. Considere un caso hipotético donde quiere auditarse la base de datos en base a los siguientes hechos detectados: - Se han modificado ciertas cuotas, asignación de espacios de almacenamiento, “tablespaces”, y contraseñas de usuario. - Se están produciendo un número considerable de abrazos mortales debido a que se están adquiriendo bloqueos exclusivos sobre tablas. - Se ha detectado el borrado de registros de la tabla SCOTT.EMP Se sospecha que los usuarios “prueba01” y “prueba02” son los responsables de las acciones anteriores. Determinar las distintas operaciones sobre las que habrá que efectuar una auditoría, así como consultar en las distintas vistas para obtener la información precisa que permita descartar o confirmar las sospechas que han dado lugar a la activación de la auditoría. Al usuario "prueba02" se le han asignado todos los permisos posibles sobre scott.emp: SQL> grant all on scott.emp to prueba02; Grant succeeded. Para activar sentencias: la auditoría se ejecutara el siguiente orden de SQL> audit alter, INDEX, RENAME ON DEFAULT BY SESSION; © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 9 Administración Básica de Oracle9i Audit succeeded. SQL> AUDIT SESSION BY prueba01, prueba02; Audit succeeded. SQL> AUDIT ALTER USER; Audit succeeded. SQL> AUDIT DROP USER; Audit succeeded. SQL> AUDIT LOCK TABLE BY ACCESS WHENEVER SUCCESSFUL; Audit succeeded. SQL> AUDIT DELETE ON scott.emp BY ACCESS WHENEVER SUCCESSFUL; Audit succeeded. Supongamos que el usuario prueba01 ejecuta las sentencias: SQL> connect prueba01 Enter password: Connected. SQL> ALTER USER prueba03 QUOTA 0 ON users; ALTER USER prueba03 QUOTA 0 ON users * ERROR at line 1: ORA-01031: insufficient privileges SQL> DROP USER prueba04; DROP USER prueba04 * ERROR at line 1: ORA-01031: insufficient privileges Supongamos que el usuario prueba02 ejecuta las sentencias: SQL> connect prueba02 Enter password: Connected. SQL> LOCK TABLE scott.emp IN EXCLUSIVE MODE; Table(s) Locked. SQL> DELETE FROM scott.emp WHERE mgr = 7698; 5 rows deleted. SQL> ALTER TABLE scott.emp STORAGE (NEXT 500K); Table altered. SQL> CREATE INDEX scott.ename_index ON scott.emp (ename); CREATE INDEX scott.ename_index ON scott.emp (ename) * © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 10 Administración Básica de Oracle9i ERROR at line 1: ORA-01031: insufficient privileges SQL> DELETE FROM scott.emp WHERE empno = 8000; 0 rows deleted. Recuperamos ahora información sobre los registros de auditoría: - Opciones de auditoría de sentencias fijadas. SQL> connect system Enter password: Connected. SQL> select user_name, sys.dba_stmt_audit_opts; audit_option,success, failure from USER_NAME AUDIT_OPTION SUCCESS FAILURE ----------------------------------------------------------------PRUEBA02 CREATE SESSION BY ACCESS BY ACCESS PRUEBA01 CREATE SESSION BY ACCESS BY ACCESS ALTER USER BY ACCESS BY ACCESS DROP USER BY ACCESS BY ACCESS LOCK TABLE BY ACCESS NOT SET - Opciones de auditoría de privilegios. SQL> select user_name, sys.dba_priv_audit_opts; privilege,success, failure from USER_NAME PRIVILEGE SUCCESS FAILURE --------------------------------------------------------------PRUEBA02 CREATE SESSION BY ACCESS BY ACCESS PRUEBA01 CREATE SESSION BY ACCESS BY ACCESS ALTER USER BY ACCESS BY ACCESS DROP USER BY ACCESS BY ACCESS - Opciones de auditoría para objetos del esquema SCOTT. SQL> SELECT * FROM sys.dba_obj_audit_opts WHERE owner = 'SCOTT' AND object_name LIKE 'EMP%'; OWNER REN SEL --------- --SCOTT -/- -/- OBJECT_NAME UPD REF EXE CRE ---------------- --- --- --EMP -/- -/- -/- -/- OBJECT_TY ALT AUD COM DEL GRA IND INS LOC REA WRI --------- --- --- --- --- --- --- --- ----- --TABLE -/- -/- -/- A/- -/- -/- -/- -/-/- -/- La información debe interpretarse de la siguiente forma: • • El carácter "-" indica que la opción de auditoría no esta fijada. EL carácter "S" indica que la opción de auditoría esta fijada “BY SESSION”. © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 11 Administración Básica de Oracle9i • • - El carácter "A" indica que la opción de auditoría esta fijada “BY ACCESS”. Cada opción de auditoría puede ser para “WHENEVER SUCCESSFUL” y “WHENEVER NOT SUCCESSFUL”; las dos opciones están separadas por "/". Información de auditoría para la sentencia “AUDIT SESSION”. SQL> select substr(os_username,1,10) usuario_so, substr (username,1,12) usuario, to_char(timestamp,'dd-mm-yyy hh24:mi:ss') tiempo_conexion, to_char(logoff_time,'dd-mm-yyyy hh24:mi:ss') tiempo_desconexion from dba_audit_session order by username,timestamp,logoff_time; USUARIO_SO ---------oracle oracle curso01 oracle oracle curso01 oracle oracle USUARIO -----------PRUEBA01 PRUEBA01 PRUEBA01 PRUEBA02 PRUEBA02 PRUEBA02 SYSTEM SYSTEM TIEMPO_CONEXION -----------------29-11-004 11:53:50 29-11-004 12:07:32 02-12-004 10:37:26 29-11-004 11:55:37 29-11-004 12:08:54 02-12-004 10:38:25 29-11-004 11:53:44 29-11-004 12:10:42 TIEMPO_DESCONEXION ------------------29-11-2004 11:55:37 29-11-2004 12:08:54 02-12-2004 10:38:25 29-11-2004 02-12-2004 29-11-2004 29-11-2004 12:10:42 10:40:03 11:53:50 12:22:42 8 rows selected. - Registros de auditoria generados para objetos. SQL> select substr(username,1,12) usuario, to_char(timestamp,'dd-mmyyy hh24:mi:ss') tiempo_conexion, substr(owner,1,10) propie, substr (obj_name,1,15) objeto, substr(action_name,1,15) accion from dba_audit_object where owner='SCOTT' order by os_username,usuario, timestamp, owner,obj_name,action_name; USUARIO TIEMPO_CONEXION PROPIE OBJETO ACCION -------------------------------------------------------------------PRUEBA02 02-12-004 10:38:35 SCOTT EMP LOCK PRUEBA02 02-12-004 10:38:45 SCOTT EMP DELETE PRUEBA02 02-12-004 10:39:12 SCOTT EMP DELETE Debe tenerse en cuenta que la opción para auditar las sentencias alter, index, ... es posterior a la creación del objeto. Si, explícitamente, se audita la tabla “emp”. SQL> audit alter, INDEX, RENAME ON scott.emp by session; Audit succeeded. SQL> connect prueba02 Enter password: Connected. SQL> SQL> ALTER TABLE scott.emp STORAGE (NEXT 500K); Table altered. SQL> CREATE INDEX scott.ename_index ON scott.emp (ename); © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 12 Administración Básica de Oracle9i CREATE INDEX scott.ename_index ON scott.emp (ename) * ERROR at line 1: ORA-01031: insufficient privileges SQL> connect system Enter password: Connected. SQL> select substr(username,1,12) usuario, to_char(timestamp,'dd-mmyyy hh24:mi:ss') tiempo_conexion, substr(owner,1,10) propie, substr (obj_name,1,15) objeto, substr(action_name,1,15) accion from dba_audit_object where owner='SCOTT' order by os_username,usuario, timestamp, owner,obj_name,action_name; USUARIO TIEMPO_CONEXION PROPIE OBJETO ACCION -------------------------------------------------------------------PRUEBA02 02-12-004 10:38:35 SCOTT EMP LOCK PRUEBA02 02-12-004 10:38:45 SCOTT EMP DELETE PRUEBA02 02-12-004 10:39:12 SCOTT EMP DELETE PRUEBA02 03-12-004 10:13:29 SCOTT EMP SESSION REC SQL> SELECT * FROM sys.dba_obj_audit_opts WHERE owner = 'SCOTT' AND object_name LIKE 'EMP%'; OWNER OBJECT_NAME ------------------------------------------COM DEL GRA IND INS LOC REN SEL UPD REF EXE --- --- --- --- --- --- --- --- --- --- --SCOTT EMP -/- A/- -/- S/S -/- -/- S/S -/- -/- -/- -/- OBJECT_TY ALT AUD --------- --- --CRE REA WRI --- --- --TABLE S/S -/-/- -/- -/- Si se audita ahora por “acceso”. SQL> audit alter, INDEX, RENAME ON scott.emp by access; Audit succeeded. SQL> connect prueba02 Enter password: Connected. SQL> ALTER TABLE scott.emp STORAGE (NEXT 1500K); Table altered. SQL> CREATE INDEX scott.ename_index ON scott.emp (ename); CREATE INDEX scott.ename_index ON scott.emp (ename) * ERROR at line 1: ORA-01031: insufficient privileges SQL> connect system Enter password: Connected. SQL> select substr(username,1,12) usuario, to_char(timestamp,'dd-mmyyy hh24:mi:ss') tiempo_conexion, substr(owner,1,10) propie, substr (obj_name,1,15) objeto, substr(action_name,1,25) accion from dba_audit_object where owner='SCOTT' order by os_username,usuario, timestamp, owner,obj_name,action_name; © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 13 Administración Básica de Oracle9i USUARIO TIEMPO_CONEXION PROPIE OBJETO ------------ ------------------ ---------- --------------ACCION ------------------------PRUEBA02 02-12-004 10:38:35 SCOTT EMP LOCK PRUEBA02 DELETE 02-12-004 10:38:45 SCOTT EMP PRUEBA02 DELETE 02-12-004 10:39:12 SCOTT EMP PRUEBA02 SESSION REC 03-12-004 10:13:29 SCOTT EMP PRUEBA02 ALTER TABLE 03-12-004 10:16:45 SCOTT EMP Observemos que prueba02 no tiene permiso para crear índices. SQL> connect system Enter password: Connected. SQL> select * from dba_sys_privs where grantee='PRUEBA02'; no rows selected SQL> select * from dba_role_privs where grantee='PRUEBA02' GRANTEE GRANTED_ROLE ADM DEF ------------------------------ ------------------------------ --- --PRUEBA02 CONEXION NO YES SQL> select * from dba_role_privs where grantee='CONEXION' no rows selected SQL> select * from dba_sys_privs where grantee='CONEXION' GRANTEE PRIVILEGE ADM ------------------------------------------------------------CONEXION CREATE SESSION NO Se le otorga permiso y se prueba a crear un índice prueba02 sobre scott.emp. Aunque falle, registra el apunte. como SQL> grant create table to prueba02; Grant succeeded. SQL> connect prueba02 Enter password: Connected. SQL> CREATE INDEX scott.ename_index ON scott.emp (kk); © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 14 Administración Básica de Oracle9i CREATE INDEX scott.ename_index ON scott.emp (kk) * ERROR at line 1: ORA-00904: "KK": invalid identifier SQL> connect system Enter password: Connected. SQL> select substr(username,1,12) usuario, to_char(timestamp,'dd-mmyyy hh24:mi:ss') tiempo_conexion, substr(owner,1,10) propie, substr (obj_name,1,15) objeto, substr(action_name,1,15) accion from dba_audit_object where owner='SCOTT' order by os_username,usuario, timestamp, owner,obj_name,action_name; USUARIO TIEMPO_CONEXION PROPIE OBJETO ACCION -------------------------------------------------------------------PRUEBA02 02-12-004 10:38:35 SCOTT EMP LOCK PRUEBA02 02-12-004 10:38:45 SCOTT EMP DELETE PRUEBA02 02-12-004 10:39:12 SCOTT EMP DELETE PRUEBA02 03-12-004 10:13:29 SCOTT EMP SESSION REC PRUEBA02 03-12-004 10:16:45 SCOTT EMP ALTER TABLE PRUEBA02 03-12-004 10:24:46 SCOTT ENAME_INDEX CREATE INDEX 6 rows selected. © Juan Luis Serradilla Amarilla y Francisco Fernández Martínez 15