# Báo cáo Tóm tắt: Các Khái niệm Chính và Cấu hình của Oracle Database Vault
## Tóm tắt
Oracle Database Vault (DV) là một tính năng bảo mật mạnh mẽ được thiết kế để bảo vệ dữ liệu nhạy cảm khỏi các mối đe dọa từ người dùng có đặc quyền cao, bao gồm cả quản trị viên cơ sở dữ liệu (DBA). Bằng cách thực thi nguyên tắc phân tách nhiệm vụ (separation of duties) và kiểm soát truy cập chi tiết, DV giảm thiểu rủi ro do lỗi của con người hoặc các hành vi độc hại.
Các cơ chế kiểm soát cốt lõi của Database Vault bao gồm:
* **Vùng (Realms):** Các vùng bảo vệ các đối tượng schema (bảng, chỉ mục, v.v.) bằng cách hạn chế quyền truy cập. **Vùng Bắt buộc (Mandatory Realms)** cung cấp sự bảo vệ mạnh nhất, yêu cầu người dùng phải có cả đặc quyền SQL tiêu chuẩn và ủy quyền truy cập vùng một cách rõ ràng, ngay cả đối với chủ sở hữu đối tượng.
* **Quy tắc Lệnh (Command Rules):** Các quy tắc này chặn hoặc cho phép có điều kiện các câu lệnh SQL cụ thể (như `DROP TABLE`, `ALTER SYSTEM`, `CONNECT`) dựa trên các yếu tố ngữ cảnh như địa chỉ IP, tên chương trình, hoặc thời gian trong ngày.
* **Quản lý Người dùng và Ủy quyền:** DV thay đổi cách quản lý người dùng cơ sở dữ liệu. Các tác vụ như tạo người dùng (`CREATE USER`) yêu cầu vai trò `DV_ACCTMGR` chuyên dụng. Việc sử dụng các tài khoản được đặt tên được khuyến khích thay vì các tài khoản chung như `SYS` và `SYSTEM` để tăng cường trách nhiệm giải trình.
* **Kiểm toán Được bảo vệ:** Trong phiên bản Oracle Database 26ai, dấu vết kiểm toán hợp nhất (unified audit trail) được bảo vệ bởi Database Vault, ngăn chặn việc truy cập trái phép ngay cả bởi người dùng có vai trò `DBA` hoặc `AUDIT_ADMIN`. Việc truy cập dữ liệu kiểm toán đòi hỏi sự ủy quyền rõ ràng từ một quản trị viên Database Vault.
Việc cấu hình liên quan đến việc tạo ra các tài khoản quản trị DV chuyên dụng (`DV_OWNER`, `DV_ACCTMGR`), kích hoạt tính năng này trên cả cơ sở dữ liệu container (CDB) và pluggable (PDB), sau đó khởi động lại cơ sở dữ liệu. Các chính sách này có thể được triển khai ở chế độ mô phỏng để kiểm tra tác động trước khi thực thi đầy đủ.
---
## Phân tích Chi tiết
### 1. Cấu hình và Kích hoạt Oracle Database Vault
Việc triển khai Database Vault là một quy trình có cấu trúc, đòi hỏi phải thiết lập trên cả cấp độ container (CDB) và pluggable (PDB) trong môi trường multitenant.
#### Quản lý Tài khoản Chuyên dụng
Oracle khuyến nghị tạo bốn tài khoản riêng biệt để quản lý các vai trò chính của Database Vault, nhằm thực thi việc phân tách nhiệm vụ:
* **Tài khoản Chính:** `c##dvowner` (với vai trò `DV_OWNER`) và `c##dvacctmgr` (với vai trò `DV_ACCTMGR`).
* **Tài khoản Dự phòng:** `c##dvowner_backup` và `c##dvacctmgr_backup` cho các trường hợp khẩn cấp.
Để giảm thiểu rủi ro khóa tài khoản, một profile cơ sở dữ liệu tùy chỉnh (`C##DV_PROFILE`) được khuyến nghị, với tham số `PASSWORD_LOCK_TIME` được thiết lập để tự động mở khóa tài khoản sau một khoảng thời gian ngắn (ví dụ: 1 phút).
#### Quy trình Kích hoạt
1. **Cấu hình trên CDB:**
* Kết nối với tư cách `sysdba`.
* Sử dụng `CONFIGURE_DV` để chỉ định các tài khoản `dvowner` và `dvacctmgr`.
* Kết nối với tư cách `c##dvowner` và thực thi `DBMS_MACADM.ENABLE_DV` để kích hoạt Database Vault.
* Khởi động lại cơ sở dữ liệu để các thay đổi có hiệu lực.
2. **Cấu hình trên PDB:**
* Quy trình tương tự được lặp lại cho mỗi PDB cần được bảo vệ.
* Sử dụng `alter session set container=` để chuyển sang PDB mong muốn.
* Thực thi `CONFIGURE_DV` và `ENABLE_DV` trong ngữ cảnh của PDB.
* Khởi động lại PDB (`ALTER PLUGGABLE DATABASE ... CLOSE IMMEDIATE;` và `OPEN;`).
3. **Xác minh:** Trạng thái của Database Vault có thể được kiểm tra bằng cách truy vấn các view `DBA_DV_STATUS` (cho cơ sở dữ liệu hiện tại) và `CDB_DV_STATUS` (cho tất cả các container). Các cột `DV_CONFIGURE_STATUS` và `DV_ENABLE_STATUS` phải hiển thị `TRUE`.
### 2. Các Cơ chế Kiểm soát Truy cập Chính
Database Vault sử dụng Vùng (Realms) và Quy tắc Lệnh (Command Rules) làm các công cụ chính để thực thi các chính sách bảo mật.
#### Vùng (Realms)
Vùng là các ranh giới bảo mật xung quanh một hoặc nhiều đối tượng schema. Chúng có hai loại:
* **Vùng Truyền thống (Traditional Realms):** Với một vùng truyền thống, người dùng có các đặc quyền đối tượng trực tiếp (ví dụ: `SELECT` trên một bảng) có thể thực hiện các thao tác truy vấn và DML. Tuy nhiên, họ cần được ủy quyền truy cập vùng để thực hiện các thao tác DDL (như `ALTER TABLE`). Một ví dụ điển hình là `Oracle System Privilege and Role Management Realm`, mặc định bảo vệ các vai trò quan trọng như `RESOURCE`. Để cấp vai trò này, một DBA phải được thêm vào vùng với tư cách là `OWNER`.
* **Vùng Bắt buộc (Mandatory Realms):** Loại này cung cấp mức độ bảo vệ cao nhất. Nó chặn tất cả các quyền truy cập—bao gồm DML, DDL và truy vấn—bất kể các đặc quyền hệ thống hay đối tượng. Để truy cập các đối tượng được bảo vệ, người dùng phải có cả các đặc quyền SQL cần thiết **và** được ủy quyền truy cập vùng một cách rõ ràng. Ngay cả chủ sở hữu của schema cũng không thể truy cập các đối tượng của chính mình nếu không được ủy quyền.
* **Ví dụ thực tế:** Tạo một vùng bắt buộc có tên `Protect HR tables` để bảo vệ tất cả các bảng và view trong schema `HR`. Sau đó, chỉ ủy quyền cho người dùng ứng dụng `HR` truy cập các đối tượng này. Một vùng riêng biệt, `Protect HR indexes`, có thể được tạo để cho phép DBA (`GKRAMER`) thực hiện bảo trì chỉ mục mà không cấp quyền truy cập vào dữ liệu bảng cơ bản.
#### Quy tắc Lệnh (Command Rules)
Quy tắc Lệnh bảo vệ cơ sở dữ liệu bằng cách kiểm soát việc thực thi các câu lệnh SQL. Mỗi quy tắc được liên kết với một Bộ quy tắc (Rule Set), chứa logic quyết định (biểu thức quy tắc) liệu lệnh có được phép chạy hay không.
* **Ngăn chặn Hành động Phá hoại:** Một quy tắc lệnh có thể được tạo để ngăn chặn lệnh `DROP TABLE` trên tất cả các đối tượng trong schema `HR`. Điều này có thể được thực hiện bằng cách liên kết lệnh với bộ quy tắc `Disabled` được xác định trước của Oracle, có biểu thức quy tắc (`1=0`) luôn trả về giá trị sai (false).
* **Kiểm soát Dựa trên Ngữ cảnh:** Các quy tắc có thể được tùy chỉnh để cho phép các lệnh chỉ trong các điều kiện cụ thể.
* **Giới hạn IP:** Một quy tắc có thể cho phép lệnh `DROP TABLE` chỉ khi nó được thực thi từ một địa chỉ IP đã được phê duyệt. Biểu thức quy tắc sử dụng `sys_context('userenv','ip_address')`.
* **KiSử dụng `sys_context('userenv','ip_address')`.
* **Kiểm soát Xác thực Ứng dụng:** Để giảm thiểu rủi ro từ việc thông tin đăng nhập ứng dụng bị đánh cắp, một quy tắc lệnh `CONNECT` có thể được tạo ra. Quy tắc này có thể yêu cầu tất cả các điều kiện sau phải được đáp ứng để người dùng `HR` kết nối: địa chỉ IP, tên máy chủ, người dùng hệ điều hành, và tên chương trình máy khách phải khớp với các giá trị được xác định trước. Nếu bất kỳ điều kiện nào không được đáp ứng, kết nối sẽ bị từ chối với một thông báo lỗi tùy chỉnh.
#### Chế độ Mô phỏng (Simulation Mode)
Cả Vùng và Quy tắc Lệnh đều có thể được đặt ở chế độ mô phỏng (`DBMS_MACUTL.G_SIMULATION`). Ở chế độ này, các kiểm soát không được thực thi, nhưng mọi vi phạm tiềm ẩn sẽ được ghi lại trong view `DVSYS.DBA_DV_SIMULATION_LOG`. Điều này cho phép quản trị viên phân tích tác động của một chính sách trước khi đưa vào thực thi (`DBMS_MACUTL.G_YES`).
### 3. Quản lý Người dùng và Phân tách Nhiệm vụ
Database Vault thay đổi căn bản việc quản trị người dùng bằng cách thực thi sự phân tách nhiệm vụ.
* **Nguyên tắc Tài khoản được đặt tên:** Oracle khuyến nghị mạnh mẽ việc sử dụng các tài khoản được đặt tên (ví dụ: `C##JSMITH`, `C##CMACK`) thay vì các tài khoản chung có đặc quyền cao như `SYS` và `SYSTEM`. Điều này đảm bảo rằng mọi hành động đều có thể được truy vết về một cá nhân cụ thể.
* **Vai trò Quản trị Chuyên dụng:** Sau khi DV được kích hoạt, các đặc quyền quản trị hệ thống như `CREATE USER`, `ALTER USER`, và `DROP USER` được kiểm soát bởi vai trò `DV_ACCTMGR`. Tương tự, việc quản lý các chính sách DV (vùng, quy tắc lệnh) yêu cầu vai trò `DV_OWNER` hoặc `DV_ADMIN`.
* **Mô hình Vận hành:** Trong một thiết lập được khuyến nghị, các tài khoản `C##DVOWNER` và `C##DVACCTMGR` ban đầu được lưu trữ an toàn và chỉ được sử dụng trong trường hợp khẩn cấp. Các hoạt động hàng ngày được thực hiện bởi một DBA được chỉ định (ví dụ: `C##JSMITH`), người đã được cấp các vai trò `DV_ACCTMGR` và `DV_ADMIN`.
| Tên người dùng | Vị trí | Trách nhiệm |
| :--- | :--- | :--- |
| `C##DVOWNER` | CDB & PDBs | Chủ sở hữu Database Vault |
| `C##DVOWNER_BACKUP` | CDB & PDBs | Tài khoản dự phòng của chủ sở hữu Database Vault |
| `C##DVACCTMGR` | CDB & PDBs | Quản lý tài khoản Database Vault |
| `C##DVACCTMGR_BACKUP` | CDB & PDBs | Tài khoản dự phòng quản lý tài khoản Database Vault |
| `C##JSMITH` | CDB & PDBs | DBA, chủ sở hữu và quản lý tài khoản Database Vault cho hoạt động hàng ngày |
| `C##CMACK` | CDB & PDBs | Quản trị viên kiểm toán |
| `GKRAMER` | PDB | DBA |
| `HR` | PDB | Chủ sở hữu ứng dụng |
### 4. Kiểm toán Hợp nhất và Ủy quyền trong Oracle 26ai
Database Vault 26ai mở rộng khả năng bảo vệ của mình đến cả dấu vết kiểm toán hợp nhất.
* **Bảo vệ theo Mặc định:** `UNIFIED_AUDIT_TRAIL` được bảo vệ, có nghĩa là ngay cả người dùng `SYS` hoặc người dùng có vai trò `AUDIT_ADMIN` cũng không thể truy vấn nó. Cố gắng truy cập sẽ dẫn đến lỗi `ORA-1031: insufficient privileges`.
* **Ủy quyền Rõ ràng:** Để cấp quyền truy cập, một người dùng có vai trò `DV_OWNER` hoặc `DV_ADMIN` phải thực thi thủ tục `DBMS_MACADM.AUTHORIZE_AUDIT_ADMIN` cho người dùng quản trị kiểm toán (ví dụ: `C##CMACK`).
* **Tạo Chính sách Kiểm toán:** Sau khi được ủy quyền, người quản trị kiểm toán có thể tạo các chính sách kiểm toán hợp nhất để ghi lại các sự kiện cụ thể của Database Vault, chẳng hạn như `REALM VIOLATION` trên một vùng cụ thể hoặc các lần sử dụng một `RULE SET`.
### 5. Minh họa Tác động: Trước và Sau khi Áp dụng Database Vault
Bảng dưới đây so sánh kết quả của các lệnh thông thường được thực hiện bởi nhiều người dùng khác nhau trước và sau khi các vùng bắt buộc và quy tắc lệnh được áp dụng cho schema `HR`.
| Lệnh | Người dùng | Kết quả TRƯỚC khi có DV | Kết quả SAU khi có DV |
| :--- | :--- | :--- | :--- |
| `SELECT COUNT(*) FROM HR.EMPLOYEES;` | `SYS` | Thành công | `ORA-01031: insufficient privileges` |
| `SELECT COUNT(*) FROM HR.EMPLOYEES;` | `HR` | Thành công | Thành công (Được ủy quyền trong vùng) |
| `CREATE INDEX ... ON HR.EMP2;` | `SYS` | Thành công | `ORA-47401: realm violation` |
| `CREATE INDEX ... ON HR.EMP2;` | `GKRAMER` | Thành công | `ORA-47415: Insufficient Oracle Database Vault authorization for DDL` |
| `DROP TABLE HR.EMP2;` | `HR` | Thành công | `ORA-47306: ... Access is blocked.` (Bị Quy tắc Lệnh chặn) |
| `DROP TABLE HR.EMP2;` | `SYS` | Thành công | `ORA-47401: realm violation` |
Sự tương phản này cho thấy cách Database Vault thực thi hiệu quả việc kiểm soát truy cập đối với những người dùng có đặc quyền cao nhất, đảm bảo rằng chỉ những người dùng được ủy quyền rõ ràng mới có thể thực hiện các hành động cụ thể trên dữ liệu được bảo vệ.