Audit database P2 - Các dạng audit chuẩn trong Oracle.
Bài đăng này đã không được cập nhật trong 3 năm
Trong bài viết lần trước mình đã giới thiệu về khái niệm và một số loại audit trong cơ sở dữ liệu (https://viblo.asia/p/audit-database-p1-1Je5E8pGlnL). Trong bài viết này mình sẽ giới thiệu cụ thể các loại audit trong Oracle và một số ví dụ trong phiên bản Oracle 11g
1. Mandatory Auditing
- Cơ sở dữ liệu sẽ ghi nhận thông tin về:
- Startup database: auditing record ghi nhận lại có bật chế độ đang audit lên hay không, phòng trường hợp admin đã tắt chế độ audit và khởi động lại CSDL.
- Shutdown database.
- Việc xác thực các user với role là SYSDBA(tương tự như quyền "root" trong Unix/Linux or "Administrator" trong Windows) hoặc SYSOPER(đối với role này thì chỉ thao tác được với các đối tượng đang để mode là public).
- Audit record sẽ được lưu ở mức hệ điều hành.
- Audit là tính năng mặc định của Oracle và để show các parameter của mandatory audit: +) Đăng nhập sqlplus với role sysdba: * Cách 1: sqlplus / as sysdba * Cách 2: CONNECT sys/password AS SYSDBA +) Nhập: SHOW PARAMETER AUDIT
2. Standard audit trail:
- Có thể audit:
- Trên đối tượng là table/ view.
- Việc thực thi proc.
- Các đặc quyền hệ thống (tắt kích hoạt 1 trigger).
- Trên 1 số user cụ thể.
- Trên các hành động thành công hoặc không thành công.
a. Kích hoạt Standard Auditing
- Chức năng Audit mặc định không được kích hoạt, nhưng có thể kích hoạt bằng lệnh sau:
ALTER SYSTEM SET audit_trail = db SCOPE = SPFILE;
Trong đó: giá trị của audit_trail có thể thay đổi tùy theo nhu cầu của người sử dung:audit_trail = {none | os | db | db, extended | xml | xml, extended}
- none: tắt chế độ audit.
- os: bật chế độ audit và các audit record sẽ được lưu trong file OS.
- db: bật chế độ audit và các audit record sẽ được lưu trong database audit trail (SYS.AUD$)
- xml: bật chế độ audit và các audit record sẽ được lưu file OS có định dạng XML
b. Kích hoạt lựa chọn Standard Auditing
- Lệnh AUDIT thiết lập lựa chọn giám sát câu lệnh và quyền thường đi sau mệnh đề "BY" để giới hạn tầm vực của câu lệnh và lựa chọn giám sát quyền.
- BY ACCESS: Ghi một record cho mỗi câu lệnh và hoạt động được audit
- BY SESSION: Ghi một record cho tất cả các câu lệnh SQL cùng loại và tất cả các hoạt động cùng loại được thực hiện trên cùng một đối tượng schema trong cùng một session
- WHENEVER SUCCESSFUL/ WHENEVER NOT SUCCESSFUL:
- WHENEVER SUCCESSFUL: thực hiện ghi dữ liệu audit đối với những câu lệnh được thực hiện thành công.
ví dụ:
AUDIT SELECT ON USERS BY ACCESS WHENEVER SUCCESSFUL;
-- Thực hiện audit đối với việc thực thi thành công câu lệnh SELECT trên bảng USERS.audit update on USERS by access WHENEVER successful;
-- -- Thực hiện audit đối với việc thực thi thành công câu lệnh UPDATE trên bảng USERS. - WHENEVER NOT SUCCESSFUL: thực hiện ghi dữ liệu audit đối với những câu lệnh được thực hiện không thành công.
ví dụ:
audit update on USERS by access WHENEVER not successful;
-- Thực hiện audit đối với việc thực thi lỗi câu lệnh UPDATE trên bảng USERS.
- WHENEVER SUCCESSFUL: thực hiện ghi dữ liệu audit đối với những câu lệnh được thực hiện thành công.
ví dụ:
- Có thể cài đặt thực hiện audit(tạo/xóa/chỉnh sửa cấu trúc bảng) trên bất kì bảng nào trên database:
AUDIT DROP ANY TABLE;
AUDIT CREATE ANY TABLE;
AUDIT DELETE ANY TABLE;
c. Disable lựa chọn Standard Auditing
- Sử dụng câu lệnh NOAUDIT để tắt các lựa chọn giám sát.
- Kết hợp với các mệnh đề WHENEVER để tắt các giám sát đối với các câu lệnh được thực hiện thành công hay không thành công.
Ví dụ:
NOAUDIT SELECT ON USERS WHENEVER SUCCESSFUL;
-- tắt chế độ audit khi lấy list users thành công.NOAUDIT SELECT ON USERS WHENEVER NOT SUCCESSFUL;
- Kết hợp với "BY":
Ví dụ:
NOAUDIT SELECT USERS BY user_name;
-- tắt chế độ audit khi lấy list users chỉ đối với user có tên là user_name. - Kết hợp với "ON":
NOAUDIT SELECT ON USERS
-- tắt chế độ audit khi lấy list users. - Ở mức tổng quát hơn, ta có thể dùng trực tiếp câu lệnh NOAUDIT với các schema_object:
ví dụ:
NOAUDIT ALL PRIVILEGES;
-- tắt audit trên quyền.NOAUDIT ROLE;
-- tắt audit trên role( ví dụ việc create/ drop... role)NOAUDIT ALL;
-- tắt giám sát trên câu lệnh
- Kết hợp với các mệnh đề WHENEVER để tắt các giám sát đối với các câu lệnh được thực hiện thành công hay không thành công.
Ví dụ:
NOTE:
*** Sử dụng DICTIONARY trong Oracle để xem những thông tin Audit: (nên dùng role SYSDBA)
DESC DBA_AUDIT_STATEMENT;
: để xem tên các columns và data type trong bảng DBA_AUDIT_STATEMENT => có thể chọn ra những field cần thiết phục vụ cho quá trình giám sát database.- Giả sử ta chỉ muốn lấy thông tin các hành động của user có tên NV001.
SELECT username, timestamp, obj_name, action_name
FROM dba_audit_trail where username = 'NV001';
All rights reserved