Bài viết này sẽ cung cấp hướng dẫn cách sử dụng Role để quản lý các quyền của người dùng trong Oracle Database. Đầu tiên, chúng ta sẽ tìm hiểu khái niệm về Role, bao gồm các loại Role và cách sử dụng chúng để quản lý quyền của người dùng.
Sau đó, bài viết sẽ cung cấp hướng dẫn chi tiết về cách tạo Role và cấp quyền cho Role đó. Bài viết cũng sẽ giới thiệu về các tính năng nâng cao của Role, bao gồm Secure Role và Privilege Analysis. Cuối cùng, chúng ta sẽ học cách sử dụng các câu lệnh SQL để quản lý Role trong Oracle Database.
Bằng cách làm theo hướng dẫn này, bạn sẽ có thể hiểu rõ hơn về cách sử dụng Role để quản lý quyền của người dùng trong Oracle Database và tăng cường bảo mật cho hệ thống của bạn.
Role trong Oracle Database
Một role là một nhóm quyền liên quan được đặt tên và được cấp cho người dùng hoặc cho các role khác. Bạn có thể sử dụng role để quản lý quyền trong cơ sở dữ liệu. Bạn có thể thêm quyền vào role và cấp role cho người dùng.
Người dùng có thể kích hoạt role và sử dụng các quyền được cấp bởi role đó. Một role bao gồm tất cả các quyền được cấp cho role đó và tất cả các quyền của các role khác được cấp cho role đó.
Các role cung cấp các lợi ích sau đối với việc quản lý quyền:
- Dễ dàng quản lý quyền: Sử dụng role để đơn giản hóa việc quản lý quyền. Thay vì cấp cùng một bộ quyền cho nhiều người dùng, bạn có thể cấp quyền cho role và sau đó cấp role đó cho từng người dùng.
- Quản lý quyền linh hoạt: Nếu các quyền liên quan đến một role bị sửa đổi, tất cả người dùng được cấp role đó sẽ tự động và ngay lập tức có các quyền được sửa đổi.
- Sẵn sàng quyền lựa chọn: Các role có thể được kích hoạt và tạm ngừng để bật và tắt các quyền tạm thời. Điều này cho phép kiểm soát các quyền của người dùng trong một tình huống nhất định.
Gán quyền(Privilege) vào Role và gán Role cho User

Trong hầu hết các hệ thống, việc cấp quyền cho từng người dùng một cách riêng lẻ là tốn thời gian và có thể gây lỗi. Phần mềm Oracle cung cấp việc quản lý quyền dễ dàng và được kiểm soát thông qua Role (roles).
Role là các nhóm quyền liên quan được cấp cho người dùng hoặc cho các Role khác. Role được thiết kế để giúp quản lý quyền trong cơ sở dữ liệu một cách dễ dàng và tăng cường bảo mật.
Các đặc điểm của Role bao gồm:
- Quyền được cấp hoặc thu hồi cho Role giống như đối với người dùng.
- Cấp và thu hồi Role cho người dùng hoặc các Role khác giống như quyền hệ thống.
- Một Role có thể bao gồm cả quyền hệ thống và đối tượng.
- Một Role có thể được kích hoạt hoặc vô hiệu hóa cho mỗi người dùng được cấp Role.
- Một Role có thể yêu cầu mật khẩu để được kích hoạt.
- Các Role không thuộc sở hữu của bất kỳ ai và không có trong bất kỳ schema nào.
Các Role được tạo sẵn

Có nhiều Role được định nghĩa tự động cho các cơ sở dữ liệu Oracle khi bạn chạy các script tạo cơ sở dữ liệu. CONNECT được tự động cấp cho bất kỳ người dùng nào được tạo với Enterprise Manager.
Quyền SELECT ANY DICTIONARY không cho phép truy cập vào các bảng từ điển dữ liệu nhạy cảm, được sở hữu bởi schema SYS.
Tham khảo Hướng dẫn bảo mật cơ sở dữ liệu Oracle để biết danh sách đầy đủ các Role được định nghĩa sẵn. Các Role khác cho phép bạn quản lý các chức năng đặc biệt được tạo khi chức năng đó được cài đặt.
Ví dụ, XDBADMIN chứa các quyền cần thiết để quản lý cơ sở dữ liệu Extensible Markup Language (XML) nếu tính năng đó được cài đặt. AQ_ADMINISTRATOR_ROLE cung cấp các quyền để quản lý hàng đợi tiên tiến.
HS_ADMIN_ROLE bao gồm các quyền cần thiết để quản lý các dịch vụ khác nhau. Bạn không nên thay đổi các quyền được cấp cho các Role chức năng này mà không có sự trợ giúp của Oracle Support vì bạn có thể vô tình vô hiệu hóa chức năng cần thiết.
Hướng dẫn tạo Role, gán quyền vào Role và gán Role cho User trong Oracle Database
Để tạo một Role trong Oracle Database bằng tiện ích sqlplus, bạn có thể làm theo các bước sau:
1. Mở cửa sổ terminal hoặc command prompt.
2. Đăng nhập vào Oracle Database bằng tài khoản có quyền DBA (hoặc tài khoản có quyền tạo Role).
3. Sử dụng lệnh sau để tạo một Role mới:
CREATE ROLE role_name;
Trong đó, role_name là tên của Role bạn muốn tạo.
4. Sau khi tạo Role, bạn có thể thêm các quyền (privilege) vào Role đó bằng cách sử dụng lệnh sau:
GRANT privilege_name TO role_name;
Trong đó, privilege_name là tên của quyền bạn muốn thêm vào Role, và role_name là tên của Role đã tạo ở bước trước đó. Ví dụ, để thêm quyền SELECT vào Role có tên read_only, bạn có thể sử dụng lệnh:
GRANT SELECT TO read_only;
5. Khi bạn đã hoàn thành việc thêm quyền vào Role, bạn có thể gán Role đó cho các user hoặc Role khác bằng cách sử dụng lệnh sau:
GRANT role_name TO user_or_role;
Trong đó, role_name là tên của Role đã tạo, và user_or_role là tên của user hoặc Role mà bạn muốn gán Role đó.
Ví dụ, để gán Role có tên read_only cho user john, bạn có thể sử dụng lệnh:
GRANT read_only TO john;
Lưu ý rằng để thực hiện các lệnh này, bạn cần phải có quyền DBA hoặc quyền tạo Role trong Oracle Database.
Bảo mật Role trong Oracle Database
Role là các nhóm quyền liên quan được gán cho người dùng hoặc các role khác. Thông thường, role sẽ được kích hoạt mặc định, điều đó có nghĩa là nếu một role được cấp cho một người dùng thì người dùng đó có thể sử dụng các quyền được cấp cho role đó. Role mặc định được gán cho người dùng khi kết nối vào hệ thống. Tuy nhiên, có thể thực hiện các thao tác sau:
001: Đưa một role về trạng thái không mặc định. Khi đó, người dùng phải kích hoạt role đó trước khi có thể sử dụng các quyền của role.
Ví dụ về đưa một role về trạng thái không mặc định:
Giả sử chúng ta có một role "manager" được mặc định trong Oracle Database và được cấp quyền quản lý dữ liệu khá nhạy cảm. Chúng ta muốn đưa role này về trạng thái không mặc định, có nghĩa là người dùng sẽ phải kích hoạt role này trước khi có thể sử dụng các quyền của role. Để làm điều này, chúng ta sử dụng lệnh sau đây trong sqlplus:ALTER ROLE manager DEFAULT;
Sau khi một role được đưa về trạng thái không mặc định, người dùng có thể kích hoạt role bằng cách sử dụng câu lệnh SET ROLE trong SQL*Plus hoặc một ứng dụng tương tự.
Ví dụ: Nếu role " manager " được đưa về trạng thái không mặc định, người dùng có thể kích hoạt role đó bằng cách sử dụng câu lệnh sau trong SQL*Plus:
SET ROLE manager;
Sau khi câu lệnh này được thực thi, người dùng sẽ có thể sử dụng các quyền được cấp cho role " manager "
002: Yêu cầu người dùng xác thực bổ sung khi kích hoạt role bằng cách sử dụng IDENTIFIED để xác định phương pháp xác thực được yêu cầu trước khi role được kích hoạt bằng câu lệnh SET ROLE. Mặc định, không cần xác thực nào để kích hoạt role.
Ví dụ về yêu cầu người dùng xác thực bổ sung khi kích hoạt role: Giả sử chúng ta có một role "admin" được cấp quyền truy cập vào các dữ liệu quan trọng của công ty. Để đảm bảo an toàn thông tin, chúng ta muốn yêu cầu người dùng phải xác thực bổ sung trước khi kích hoạt role này.
Chúng ta có thể sử dụng IDENTIFIED để xác định phương pháp xác thực được yêu cầu trước khi role được kích hoạt bằng câu lệnh SET ROLE. Ví dụ, nếu chúng ta muốn yêu cầu người dùng phải nhập mật khẩu để kích hoạt role "admin", chúng ta có thể sử dụng lệnh sau đây trong sqlplus:
CREATE ROLE admin IDENTIFIED BY password;
Sau đó, khi người dùng muốn kích hoạt role "admin", họ phải nhập mật khẩu để xác thực bổ sung trước khi role được kích hoạt.
003: Tạo các secure application role, chỉ có thể được kích hoạt bằng cách thực thi thành công một thủ tục PL/SQL. Thủ tục PL/SQL này có thể kiểm tra các thông tin như địa chỉ mạng của người dùng, chương trình mà người dùng đang chạy, thời gian trong ngày và các yếu tố khác cần thiết để bảo vệ một nhóm quyền.
004: Quản lý role dễ dàng hơn bằng cách sử dụng tùy chọn Oracle Database Vault. Các secure application role được đơn giản hóa và các role truyền thống có thể được hạn chế hơn.
Lưu ý: Xác thực role có thể được xác định bằng cách sử dụng Enterprise Manager Cloud Control, nhưng không được hỗ trợ trong Enterprise Manager Database Express.
Phân tích Privilege trong Oracle Database

Một vấn đề lớn trong nhiều cơ sở dữ liệu là các người dùng hiện có trong cơ sở dữ liệu và ứng dụng có quyền hạn quá cao. Các quyền hạn quá cao vi phạm nguyên tắc ít quyền hơn. Để đạt được nguyên tắc ít quyền hơn, các quyền hạn không sử dụng cần được xác định.
Oracle Database 12c cung cấp một package tên là DBMS_PRIVILEGE_CAPTURE để phân tích các quyền hạn được sử dụng. Bạn có thể sử dụng chính sách phân tích quyền hạn để xác định các Object privilege và System privilege được sử dụng để chạy một mô-đun ứng dụng hoặc thực thi một số lệnh SQL hoặc quyền hạn được sử dụng bởi các role đã được xác định.
Bạn có thể tạo báo cáo về các quyền hạn đã sử dụng và không được sử dụng trong thời gian phân tích. Báo cáo giúp cho nhân viên an ninh thu hồi các quyền hạn không cần thiết bằng cách so sánh danh sách quyền hạn được cấp phép đã sử dụng và không được sử dụng

Khi tạo một phân tích, bạn đầu tiên xác định các đối tượng được nhắm mục tiêu để phân tích các quyền sử dụng. Bạn thực hiện điều đó bằng cách thiết lập loại phân tích:
- Phân tích database: Nếu không có điều kiện nào được cung cấp, nó phân tích các quyền sử dụng (trừ các quyền được sử dụng bởi người dùng quản trị) trong toàn bộ cơ sở dữ liệu.
- Phân tích role: Nếu các role được xác định, nó phân tích các quyền được thực hiện thông qua bất kỳ role nào được cho. Ví dụ, nếu bạn tạo một chính sách phân tích quyền để phân tích trên PUBLIC, các quyền được trực tiếp và gián tiếp cấp cho PUBLIC được phân tích khi chúng được sử dụng.
- Phân tích theo context: Nếu các ngữ cảnh được xác định, nó phân tích các quyền được sử dụng thông qua một module ứng dụng nhất định hoặc các ngữ cảnh được chỉ định. Các điều kiện khác nhau có thể được kết hợp với các toán tử Boolean "AND" và / hoặc "OR".
Do chính sách được tạo ra không được kích hoạt theo mặc định, bước tiếp theo của bạn là kích hoạt chính sách để bắt đầu phân tích các quyền sử dụng. Sau một thời gian nhất định, bạn ngừng phân tích. Bước thứ ba của bạn là tạo một báo cáo.
Báo cáo bao gồm hai loại kết quả:
- Quyền được sử dụng được hiển thị trong các views DBA_USED_xxx và DBA_USED_xxx_PATH
- Quyền chưa được sử dụng được hiển thị trong các views DBA_UNUSED_xxx và DBA_UNUSED_xxx_PATH.
BÀI VIẾT LIÊN QUAN