Thứ Năm, 4 tháng 9, 2025

Nguyên tắc tối thiểu hoá các quyền trong Oracle database (Principal of Least Privilege)

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

  1. 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.
  2. 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 binh1;

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 = 'BINH1';

SELECT * FROM dba_tab_privs WHERE grantee = 'BINH1';

Thu hồi quyền không cần thiết từ người dùng duong1:

REVOKE INSERT ON BINH_OWNER.tab1 FROM BINH1;

Á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.

=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cở sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master