Nguyên tắc tối thiểu hoá các quyền trong Oracle database (Principal of Least Privilege) là một phương pháp bảo mật quan trọng trong việc quản lý cơ sở dữ liệu Oracle. Nguyên tắc này yêu cầu mỗi người dùng hoặc quy trình chỉ được cấp quyền hạn cần thiết để thực hiện công việc của mình và không hơn.
1. Nguyên tắc tối thiểu hoá các quyền?
Nguyên tắc tối thiểu hoá các quyền (Principle of Least Privilege) là một khái niệm trong bảo mật thông tin nhằm giảm thiểu nguy cơ bảo mật bằng cách giới hạn quyền truy cập của người dùng hoặc quy trình chỉ ở mức cần thiết để hoàn thành nhiệm vụ cụ thể của họ. Điều này giúp ngăn chặn việc lạm dụng quyền hạn và giảm thiểu thiệt hại nếu tài khoản bị xâm phạm.
2. Lợi Ích của Việc Áp Dụng Nguyên tắc tối thiểu hoá các quyền
- Bảo vệ dữ liệu nhạy cảm: Giảm nguy cơ truy cập trái phép vào dữ liệu nhạy cảm.
- Giảm thiểu rủi ro bảo mật: Hạn chế khả năng người dùng hoặc quy trình gây hại cho hệ thống.
- Tăng cường kiểm soát: Dễ dàng quản lý và giám sát quyền truy cập của người dùng.
- Tuân thủ quy định: Đáp ứng yêu cầu bảo mật của các tiêu chuẩn và quy định về bảo vệ dữ liệu.
3. Cách Áp Dụng Nguyên tắc tối thiểu hoá các quyền trong Oracle
Bước 1: Xác Định Quyền Hạn Cần Thiết
- Xác định Role và trách nhiệm của người dùng: Hiểu rõ nhiệm vụ cụ thể của mỗi người dùng để xác định quyền hạn cần thiết.
- Liệt kê các quyền hạn tối thiểu cần thiết: Xác định các quyền cụ thể mà người dùng cần để hoàn thành công việc của họ.
Bước 2: Tạo Các Roles Cụ Thể
Sử dụng Role để quản lý quyền hạn thay vì gán quyền trực tiếp cho người dùng. Điều này giúp dễ dàng quản lý và kiểm soát quyền hạn.
Tạo Role mới:
CREATE ROLE role_name;
Gán quyền hạn cho Role:
GRANT privilege_name TO role_name;
Bước 3: Gán Role Cho Người Dùng
Tạo người dùng mới (nếu cần):
CREATE USER username IDENTIFIED BY password;
Gán Role cho người dùng:
GRANT role_name TO username;
Bước 4: Kiểm Tra và Giám Sát Quyền Hạn
SELECT * FROM dba_sys_privs WHERE grantee = 'USERNAME'; SELECT * FROM dba_tab_privs WHERE grantee = 'USERNAME';
Thu hồi các quyền không cần thiết:
REVOKE privilege_name FROM username;
SỬ DỤNG AUDIT:
Bật Audit để theo dõi việc sử dụng quyền
AUDIT SELECT TABLE BY username BY ACCESS; AUDIT INSERT TABLE BY username BY ACCESS; AUDIT UPDATE TABLE BY username BY ACCESS; AUDIT DELETE TABLE BY username BY ACCESS;
Kiểm tra quyền đã sử dụng:
SELECT USERNAME, PRIV_USED, COUNT(*) AS USAGE_COUNT FROM DBA_AUDIT_TRAIL WHERE USERNAME = 'USERNAME' GROUP BY USERNAME, PRIV_USED ORDER BY USAGE_COUNT;
Kết hợp với quyền đã cấp trong: DBA_SYS_PRIVS và DBA_TAB_PRIVS => sẽ có được các quyền ít sử dụng
Revoke các quyền ít sử dụng: REVOKE SELECT ON employees FROM username;
Sử dụng gói DBMS_PRIVILEGE_CAPTURE để ghi lại sự kiện sử dụng các quyền trên hệ thống
- Tạo policy. (CREATE_CAPTURE)
- Enable policy. (ENABLE_CAPTURE)
- Chờ policy hoạt động ghi lại thông tin
- Tắt policy. (DISABLE_CAPTURE)
- Phân tích kết quả. (GENERATE_RESULT and query dictionary views)
- Xoá policy nếu không cần thiết. (DROP_CAPTURE)
Các loại capture có thể áp dụng:
- G_DATABASE : toàn bộ database
- G_ROLE : phân tích tất cả các quyền được khai báo trong roles
- G_CONTEXT : phân tích các quyền được khai báo
- G_ROLE_AND_CONTEXT : roles và quyền được khai báo
-- Whole database (type = G_DATABASE). begin dbms_privilege_capture.create_capture( name => 'db_pol', type => dbms_privilege_capture.g_database ); end; / -- One or more roles (type = G_ROLE). begin dbms_privilege_capture.create_capture( name => 'role_pol', type => dbms_privilege_capture.g_role, roles => role_name_list('DBA', 'RESOURCE') ); end; / -- A user defined condition, when user is TEST (type = G_CONTEXT). begin dbms_privilege_capture.create_capture( name => 'cond_pol', type => dbms_privilege_capture.g_context, condition => 'sys_context(''userenv'', ''session_user'') = ''TEST''' ); end; / -- Combination of roles and conditions (type = G_ROLE_AND_CONTEXT). begin dbms_privilege_capture.create_capture( name => 'role_cond_pol', type => dbms_privilege_capture.g_role_and_context, roles => role_name_list('dba', 'resource'), condition => 'sys_context(''userenv'', ''session_user'') in (''TEST'',''EMP'')' ); end; /
Kiểm tra capture policies được kích hoạt hay chưa:
select name, type, enabled, roles, context from dba_priv_captures order by name;
Bật capture policies:
begin dbms_privilege_capture.enable_capture('db_pol'); dbms_privilege_capture.enable_capture('cond_pol'); end; /
Tắt capture policies:
begin dbms_privilege_capture.disable_capture('db_pol'); dbms_privilege_capture.disable_capture('cond_pol'); end; /
Lấy báo cáo về capture policies:
begin dbms_privilege_capture.generate_result('db_pol'); end; /
Xem thông tin báo cáo trong các Views:
DBA_PRIV_CAPTURES DBA_USED_OBJPRIVS DBA_USED_OBJPRIVS_PATH DBA_USED_PRIVS DBA_USED_PUBPRIVS DBA_USED_SYSPRIVS DBA_USED_SYSPRIVS_PATH DBA_USED_USERPRIVS DBA_USED_USERPRIVS_PATH DBA_UNUSED_OBJPRIVS DBA_UNUSED_OBJPRIVS_PATH DBA_UNUSED_PRIVS DBA_UNUSED_SYSPRIVS DBA_UNUSED_SYSPRIVS_PATH DBA_UNUSED_USERPRIVS DBA_UNUSED_USERPRIVS_PATH
Xoá capture policies nếu không sử dụng:
begin dbms_privilege_capture.drop_capture('cond_pol'); dbms_privilege_capture.drop_capture('db_pol'); dbms_privilege_capture.drop_capture('role_cond_pol'); dbms_privilege_capture.drop_capture('role_pol'); end; /
Ví Dụ Thực Tế
Ví Dụ 1: Tạo Role và Gán Quyền
Tạo Role read_only_role với quyền chỉ đọc:
CREATE ROLE read_only_role; GRANT SELECT ON DUONG_USER2.tab TO read_only_role;
Tạo người dùng duong1 và gán Role read_only_role:
CREATE USER duong1 IDENTIFIED BY oracle; GRANT read_only_role TO duong1;
Ví Dụ 2: Thu Hồi Quyền Hạn
Kiểm tra quyền hạn của người dùng duong1:
SELECT * FROM dba_sys_privs WHERE grantee = 'DUONG1'; SELECT * FROM dba_tab_privs WHERE grantee = 'DUONG1';
Thu hồi quyền không cần thiết từ người dùng duong1:
REVOKE INSERT ON DUONG_USER1.tab FROM duong1;
Áp dụng Nguyên tắc tối thiểu hoá các quyền trong quản trị Oracle Database là một phương pháp hiệu quả để tăng cường bảo mật và kiểm soát quyền truy cập. Bằng cách xác định rõ quyền hạn cần thiết, sử dụng Role để quản lý quyền hạn, và thường xuyên kiểm tra, giám sát quyền hạn của người dùng, bạn có thể giảm thiểu rủi ro bảo mật và bảo vệ dữ liệu quan trọng trong hệ thống cơ sở dữ liệu của mình.