Bé kích cơ sở dữ liệu (Trigger)50

Một phần của tài liệu tìm hiểu oracle i và bài toán quản lý sách (Trang 51 - 55)

1.1.8 .Bảo mật database trong việc phát triển ứng dông24

1.2. SQL*Plus, PL/SQL, Function, Procedure, Package, Trigger33

1.2.9. Bé kích cơ sở dữ liệu (Trigger)50

Trigger của Oracle là một khối mã đặc biệt được kích hoạt bởi một sự kiện trong CSDL. Hầu hết ứng dụng sử dụng trigger để cập nhật một số bảng nào đó dùa trên một hoạt động trong bảng khác. trigger buộc các nguyên tắc giao dịch trong CSDL. Trigger có thể kích hoạt dùa trên các phát biểu DML hoặc ĐL. Bạn có thể dị xét các hoạt động cụ thể của người dùng bằng cách viết trigger hoặc các thủ tục lưu trước khác sẽ ghi nhận thông tin người dùng vào một bảng khi người dùng thực hiện các hoạt động CSDL cụ thể, chẳng hạn nh cập nhật bảng.

Bạn có thể tạo một vài kiểu trigger trong Oracle9i bao gồm các trigger DML và ĐL dùa trên các hoạt động của người dùng trên các bảng và view và các trigger mức hệ thống có tầm vực rộng hơn.

ạ các ví dụ của phần (trigger) với dữ liệu lấy từ CSDL pubs

- trigger sau để dò xét hoạt động thêm dữ liệu của người dùng trên một bảng

Trước tiên ta tạo một bảng gồm 2 trường (user_name và ngay_insert) để lưu trữ thông tin ai đã insert vào bảng tacgia và vào thời gian nàọ

+Tạo bảng để lưu thông tin: SQL> create table kt 2 (user_name varchar2(20), 3 ngay_insert date); Table created. SQL> +Tạo trigger

SQL> create or replace trigger kt_insert_table 2 after insert on kds.tacgia

3 begin

4 insert into kt values(user,sysdate); 5 end;

6 /

Trigger created. SQL>

+bây giê ta insert vào bảng tacgia SQL> insert into tacgia

2 values(31,'thuy hoá,'daithuyhoa@yahoọcom','',''); 1 row created.

SQL>

+ xem thông tin ở bảng kt SQL> select * from kt;

USER_NAME NGAY_INSE -------------------- ----------------- KDS 28-APR-06 SQL>

- Tạo một trigger để kiểm tra đăng nhập/thoát khỏi CSDL Trigger này ở mức hệ thống vì đó chúng ta làm việc trên system +trước hết ta tạo bảng kiểm tra có tên là: logon_kt

SQL> create table logon_kt 2 (user_id varchar2(30), 3 sess_id number(10), 4 logon_time date, 5 logoff_time date, 6 host varchar2(20));

Tìm hiểu Oracle9i và bài toán quản lý sách

Table created. SQL>

Tiếp theo tạo cặp trigger đăng nhập và thoát khỏi CSDL SQL> create or replace trigger logon_kt_trig

2 after logon 3 on database 4 begin

5 insert into logon_kt

6 values(user,sys_context('userenv','sessionid'),sysdate,null, 7 sys_context('userenv','host')); 8 end; 9 / Trigger created. SQL>

Tạo trigger kiểm tra logoff

SQL> create or replace trigger logoff_kt_trig 2 before logoff on database

3 begin

4 insert into logon_kt

5 values(user,sys_context('userenv','sessionid'),null,sysdate, 6 sys_context('userenv','host')); 7 end; 8 / Trigger created. SQL>

Sau đó bạn đăng nhập và thốt khỏi mấy lần, và xem thơng tin của bảng logon_kt

SQL> select * from logon_kt;

USER_ID SESS LOGON_T LOGOFF_T HOST -------------------- ------- -------------- --------------- ---------------------- SYSTEM 596 28-APR-06 WORKGROUP\PD KDS 597 28-APR-06 WORKGROUP\PD KDS 597 28-APR-06 WORKGROUP\PD SYSTEM 598 28-APR-06 WORKGROUP\PD SYSTEM 598 28-APR-06 WORKGROUP\PD SCOTT 599 28-APR-06 WORKGROUP\PD SCOTT 599 28-APR-06 WORKGROUP\PD PHUONGDONG 600 28-APR-06 WORKGROUP\PD PHUONGDONG 600 28-APR-06 WORKGROUP\PD SYSTEM 601 28-APR-06 WORKGROUP\PD 10 rows selected.

SQL>

- Trigger dò xét hành vi người dùng.

+Trước hết bạn cũng tạo bảng để ghi nhận các thông tin từ trigger đưa về: SQL> create table đl_log

2 (user_name varchar2(30), 3 change_date date,

Tìm hiểu Oracle9i và bài tốn quản lý sách

4 đl_type varchar2(40),object_owner varchar2(30), 5 database_name varchar2(20));

Table created. SQL>

+ tạo trigger

SQL> create or replace trigger đl_log_trig 2 before đl on database

3 begin

4 insert into đl_log

5 values(ora_login_user,sysdate,ora_dict_obj_type, 6 ora_dict_obj_owner,ora_database_name); 7 end; 8 / Trigger created. SQL>

Một phần của tài liệu tìm hiểu oracle i và bài toán quản lý sách (Trang 51 - 55)

Tải bản đầy đủ (DOC)

(89 trang)
w