Download as pdf or txt
Download as pdf or txt
You are on page 1of 2

SET SERVEROUTPUT ON;

Activar la Auditoria de Conectividad NO CREATE OR REPLACE PACKAGE


EXITOSA a la base de datos 1er desde scott PKG_EXAM_FINAL AS
audit session whenever not successful; CREATE TABLE emp_fga ( PROCEDURE SP_INSDISTRITO
empno NUMBER (4) NOT NULL, (V_COD_DIST DISTRITO.COD_DIST%TYPE,
ename VARCHAR2 (10), V_DESCRIP_DIST
Activar la auditoria para el usuario SCOTT job VARCHAR2 (9), DISTRITO.DESCRIP_DIST%TYPE);
de ALTERAR Y BORRAR cualquier INDICE. mgr NUMBER (4), PROCEDURE SP_DROPDISTRITO
1ero nos conectamos con el usuario SYS. hiredate DATE, (V_COD_DIST DISTRITO.COD_DIST%TYPE);
SQL> connec sys as sysdba; sal NUMBER (7, 2), END PKG_EXAM_FINAL;
Enter password: comm NUMBER (7, 2), SELECT * FROM DISTRITO
Connected. deptno NUMBER (2) ); SELECT * FROM DEPT
2do Modificamos el audit trail y 2do Insertamos registros:
reiniciar: INSERT INTO emp_fga(empno,ename, CREATE OR REPLACE PACKAGE BODY
SQL> alter system set audit_trail = sal) VALUES (9998, 'Tim', 1); PKG_EXAM_FINAL AS
db,extended scope=spfile; INSERT INTO emp_fga(empno,ename, PROCEDURE SP_INSDISTRITO(V_COD_DIST
System altered. sal)VALUES (9999,'Larry',50001); DISTRITO.COD_DIST%TYPE, V_DESCRIP_DIST
SQL> startup force; begin DISTRITO.DESCRIP_DIST%TYPE)
ORACLE instance started. 3ero creamos la politica AS
3ero activamos las auditoria: dbms_fga.add_policy( BEGIN
audit index by access; object_schema=>'SCOTT', INSERT INTO
audit create any index; object_name => 'EMP_FGA', DISTRITO(COD_DIST,DESCRIP_DIST)
audit index on SCOTT.emp by access; policy_name=>'SALARY_CHK_AUDIT', VALUES(V_COD_DIST, V_DESCRIP_DIST);
4to creamos y eliminamos uno de los audit_condition=>'SAL>50000', DBMS_OUTPUT.PUT_LINE('EL DISTRITO '
índices desde el usuario SCOTT audit_column => 'SAL', ||V_DESCRIP_DIST||' ES INGRESADO');
create index idx_name on emp(ename); statement_types => 'SELECT' END SP_INSDISTRITO;
drop index idx_name; );
5to Verificaremos la auditoria desde el end; PROCEDURE SP_DROPDISTRITO (V_COD_DIST
usuario SYS: DISTRITO.COD_DIST%TYPE) AS
select * from sys . dba_audit_trail where begin V_RECODESTRITO DISTRITO%ROWTYPE;
action_name like '%INDEX' and dbms_fga.add_policy( BEGIN
username='SCOTT'; object_schema=>'SCOTT', SELECT * INTO V_RECODESTRITO FROM
object_name => 'EMP_FGA', DISTRITO WHERE COD_DIST=V_COD_DIST;
Activar la auditoria de Select, delete, policy_name=>'SALARY_CHK_AUDIT', DELETE FROM DISTRITO WHERE
insert y update para la tabla EMP del audit_condition=>'SAL > 50000', COD_DIST=V_COD_DIST;
usuario SCOTT por acceso audit_column => 'SAL', COMMIT;
1ero debe estar conectado con el usuario statement_types => 'INSERT' DBMS_OUTPUT.PUT_LINE('EL DISTRITO'
SYS: ); ||' '||V_RECODESTRITO.COD_DIST||' '
audit select,delete,update,insert on end; ||'FUE ELIMINADO');
scott.emp by access; EXCEPTION
begin WHEN NO_DATA_FOUND THEN
Verificaremos con algunas operaciones dbms_fga.add_policy( DBMS_OUTPUT.PUT_LINE('EL
desde el usuario SCOTT object_schema=>'SCOTT', DEPARTAMENTO NO EXISTE O
Luego visualizamos los datos de la tabla object_name => 'EMP_FGA', YA FUE ELIMINADO');
emp: policy_name => 'SALARY_CHK_AUDIT', END SP_DROPDISTRITO ;
select * from EMP audit_condition => 'SAL > 50000', END PKG_EXAM_FINAL;
Insertamos un registro: audit_column => 'SAL',
insert into emp statement_types => 'SELECT' EXECUTE
values(6369,'ALEX','MANAGER',7566,'12-oct- ); PKG_EXAM_FINAL.SP_INSDISTRITO(55,'ANCON
75',5000,100,20) end; DONDE VIVE MI EX');
Eliminamos el registro insertado: EXECUTE
DELETE FROM EMP Desde el usuario SCOTT realizar las PKG_EXAM_FINAL.SP_DROPDISTRITO(55);
WHERE EMPNO='6369' siguientes pruebas: SELECT * FROM DISTRITO;
Finalmente verifiquemos la auditoria desde 1ero SELECT: SELECT * FROM CLIENTE;
el usuario SYS entorno gráfico: select sal from emp_fga where ename =
SELECT username, extended_timestamp, 'Tim'; ----
owner, obj_name, action_name,transactionid select sal from emp_fga where ename = CREATE SEQUENCE SEQ_FINAL
FROM dba_audit_trail 'Larry'; START WITH 50
WHERE owner = 'SCOTT' and obj_name='EMP' 2do INSERT: INCREMENT BY 10
ORDER BY timestamp; INSERT INTO emp_fga (empno, ename, sal) NOCACHE;
VALUES (9991, 'José', 1); CREATE OR REPLACE PACKAGE PKG_EXAM_FINAL
INSERT INTO emp_fga (empno, ename, sal) AS
Desactivar la auditoria de Select para la VALUES (9992, 'María', 50001); PROCEDURE SP_INSDEPT (V_COD
tabla EMP del usuario SCOTT y ejecutar el DEPT.DEPTNO%TYPE, V_DNAME
SELECT correspondiente para visualizar Finalmente verificaremos la auditoria con DEPT.DNAME%TYPE,V_LOC DEPT.LOC%TYPE);
todos los registros de auditoria de la el usuario SYS as SYSDBA entorno gráfico: END;
fecha actual – usuario: SCOTT select db_user, os_user, timestamp, CREATE OR REPLACE PACKAGE BODY
NOAUDIT select on scott.emp; object_schema, object_name, policy_name, PKG_EXAM_FINAL AS
Select * from sys . dba_audit_trail where sql_text from dba_fga_audit_trail; PROCEDURE SP_INSDEPT(V_COD
username='SCOTT' DEPT.DEPTNO%TYPE,V_DNAME
and DEPT.DNAME%TYPE,V_LOC DEPT.LOC%TYPE)
to_char(timestamp,'dd/mm/yy')='07/06/15'; AS BEGIN
INSERT INTO DEPT(DEPTNO,DNAME,LOC)
VALUES(V_COD, V_DNAME, V_LOC);
dbms_output.put_line('EL DEPARTAMENTO '||
v_dname||' FUE INGRESADO');
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
DBMS_OUTPUT.PUT_LINE('Ya
existe un Dpt. con el código ingresado');
WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('Error desconocido');
END SP_INSDEPT;
END PKG_EXAM_FINAL;

EXEC
PKG_EXAM_FINAL.SP_INSDEPT(SEQ_FINAL.NEXTVA
L,'RRHHsasd','LIMASasd');

select * from dept;


PREGUNTA 4
CREATE TABLE emp_aud
(empno char(4),
ename varchar2(15),
ant_sal number(10,2),
new_sal number(10,2),
usuario varchar2(25),
fecha date );

CREATE OR REPLACE TRIGGER INGRESAREMP


BEFORE UPDATE(DELETE) ON EMP
FOR EACH ROW
BEGIN
INSERT INTO AUD_PRODUCTO VALUES
(:old.EMPNO, :old.ENAME,
:old.ANT_SAL, :old(NEW).NEW_SAL,
USER, SYSDATE);
END;

INSERT INTO EMP


(EMPNO,ENAME,ANT_SAL,NEW_SAL)
VALUES (1118,'yeah',100,110);

select * from EMP;


select * from EMP_AUD;
DELETE FROM EMP WHERE EMPNO = '';

CREATE TABLE AUD_DISTRITO


(COD_DIST CHAR(3) NOT NULL PRIMARY KEY,
DESCRIP_DIST VARCHAR2(50),
USUARIO VARCHAR2(15),
FECHA DATE);

CREATE OR REPLACE TRIGGER BAJAS


AFTER DELETE ON DISTRITO
FOR EACH ROW
BEGIN
INSERT INTO AUD_DISTRITO VALUES
(:OLD.COD_DIST,:OLD.DESCRIP_DIST, USER,
SYSDATE);
END;
--EJECUTAR
SELECT *FROM AUD_DISTRITO
SELECT * FROM DISTRITO
DELETE FROM DISTRITO WHERE COD_DIST='C10'

INSERT INTO DISTRITO VALUES


('C10','COLDHEADSKILLET');

You might also like