Audit Oracle database sử dụng Trigger

Sử dụng trigger để audit database trong Oracle là một phương pháp hiệu quả để giám sát và ghi lại các thay đổi đối với dữ liệu trong các bảng. Trigger có thể được sử dụng để tự động ghi lại thông tin về các thao tác như INSERT, UPDATE, và DELETE vào một bảng audit. Dưới đây là các bước chi tiết để cấu hình và sử dụng trigger để audit database.

1. Tạo Bảng và bảng lưu giá trị Audit

Trước tiên, bạn cần tạo một bảng để lưu trữ các bản ghi audit. Bảng này sẽ chứa các thông tin cần thiết như tên người dùng, thời gian thao tác, loại thao tác (INSERT, UPDATE, DELETE), và các giá trị cũ và mới của các cột được thay đổi.

## bảng data:

CREATE TABLE employees (

employee_id NUMBER(6) PRIMARY KEY,

first_name VARCHAR2(20),

last_name VARCHAR2(25) NOT NULL,

email VARCHAR2(25) NOT NULL,

phone_number VARCHAR2(20),

hire_date DATE NOT NULL,

job_id VARCHAR2(10) NOT NULL,

salary NUMBER(8, 2),

manager_id NUMBER(6),

department_id NUMBER(4)

);

## bảng lưu giá trị audit

CREATE TABLE employees_audit (

audit_id NUMBER PRIMARY KEY,

employee_id NUMBER,

action VARCHAR2(10),

old_first_name VARCHAR2(50),

new_first_name VARCHAR2(50),

old_last_name VARCHAR2(50),

new_last_name VARCHAR2(50),

changed_by VARCHAR2(30),

changed_on DATE

);

2. Tạo Trigger

Tiếp theo, bạn tạo các trigger để tự động ghi lại các thao tác INSERT, UPDATE, và DELETE trên bảng employees.

Trigger cho thao tác INSERT

CREATE OR REPLACE TRIGGER trg_employees_insert
AFTER INSERT ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_audit (audit_id, employee_id, action, new_first_name, new_last_name, changed_by, changed_on)

VALUES (employees_audit_seq.NEXTVAL, :NEW.employee_id, 'INSERT', :NEW.first_name, :NEW.last_name, USER, SYSDATE);
END;
/

Trigger cho thao tác UPDATE

CREATE OR REPLACE TRIGGER trg_employees_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_audit (audit_id, employee_id, action, old_first_name, new_first_name, old_last_name, new_last_name, changed_by, changed_on)

VALUES (employees_audit_seq.NEXTVAL, :OLD.employee_id, 'UPDATE', :OLD.first_name, :NEW.first_name, :OLD.last_name, :NEW.last_name, USER, SYSDATE);
END;
/

Trigger cho thao tác DELETE

CREATE OR REPLACE TRIGGER trg_employees_delete
AFTER DELETE ON employees
FOR EACH ROW
BEGIN
INSERT INTO employees_audit (audit_id, employee_id, action, old_first_name, old_last_name, changed_by, changed_on)

VALUES (employees_audit_seq.NEXTVAL, :OLD.employee_id, 'DELETE', :OLD.first_name, :OLD.last_name, USER, SYSDATE);
END;
/

3. Tạo Sequence cho audit_id

Sequence giúp tạo ra các giá trị duy nhất cho cột audit_id trong bảng audit.

CREATE SEQUENCE employees_audit_seq

START WITH 1

INCREMENT BY 1

NOCACHE

NOCYCLE;

4. Kiểm tra Hoạt động của Trigger

Thực hiện một số thao tác trên bảng employees và kiểm tra các bản ghi audit trong bảng employees_audit.

INSERT INTO employees (employee_id, first_name, last_name, email, job_id, hire_date) VALUES (102, ‘John’, ‘Doe’,’duongnv@gmail.com’,’33’,sysdate);

UPDATE employees SET first_name = ‘Jane NANNA’ WHERE employee_id = 102;

DELETE FROM employees WHERE employee_id = 102;

DELETE FROM employees WHERE employee_id = 101;

Kiểm tra các bản ghi audit

SELECT * FROM employees_audit;

word image 2310 1

 

0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận