Data Redaction trong Oracle Database là một tính năng giúp bảo vệ dữ liệu nhạy cảm bằng cách che giấu hoặc làm thay đổi dữ liệu khi nó được truy xuất bởi người dùng không được phép. Điều này giúp đảm bảo rằng dữ liệu nhạy cảm không bị lộ ra ngoài trong các báo cáo, ứng dụng hoặc truy vấn.
Data Redaction Oracle Database | Che giấu dữ liệu trong Oracle database
Các Bước Sử Dụng Data Redaction
1. Tạo Chính Sách Redaction
Trước tiên, bạn cần tạo một chính sách Data Redaction để chỉ định dữ liệu nào cần được redacted và cách redacted.
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'HR', -- Schema chứa bảng object_name => 'EMPLOYEES', -- Tên bảng policy_name => 'ssn_redaction_policy', -- Tên chính sách column_name => 'SSN', -- Tên cột cần redacted expression => '1=1', -- Điều kiện áp dụng chính sách, '1=1' nghĩa là áp dụng cho tất cả function_type => DBMS_REDACT.FULL, -- Kiểu redaction function_parameters => ' ' -- Tham số cho kiểu redaction (nếu có) ); END; /
2. Kiểm Tra Chính Sách Redaction
Sau khi tạo chính sách, bạn có thể kiểm tra xem chính sách đã được áp dụng chưa bằng cách truy vấn bảng và xem dữ liệu đã được redacted chưa.
SELECT employee_id, ssn FROM HR.EMPLOYEES;
Nếu chính sách được áp dụng đúng cách, cột SSN sẽ hiển thị dữ liệu đã được redacted (ví dụ: tất cả giá trị đều là dấu hoa thị).
Xem tất cả Redactions:
–xem thông tin các redaction hiện có trên user
SELECT * FROM REDACTION_POLICIES;
–xem trong full redaction có các loại gì
select * from REDACTION_VALUES_FOR_TYPE_FULL;
–xem thông tin cột được redaction
select * from REDACTION_COLUMNS;
3. Chỉnh Sửa Chính Sách Redaction
Bạn có thể cập nhật chính sách Data Redaction nếu cần.
BEGIN DBMS_REDACT.ALTER_POLICY( object_schema => 'HR', object_name => 'EMPLOYEES', policy_name => 'ssn_redaction_policy', function_type => DBMS_REDACT.PARTIAL, -- Thay đổi kiểu redaction function_parameters => 'XXXX-XXXX-1234' -- Định dạng dữ liệu sau khi redacted ); END; /
4. Xóa Chính Sách Redaction
Nếu bạn muốn xóa chính sách Data Redaction, bạn có thể sử dụng lệnh sau:
BEGIN DBMS_REDACT.DROP_POLICY( object_schema => 'HR', object_name => 'EMPLOYEES', policy_name => 'ssn_redaction_policy' ); END; /
Các Kiểu Redaction Có Sẵn
Oracle Database cung cấp nhiều kiểu redaction khác nhau tùy theo nhu cầu bảo mật:
- FULL: Che giấu hoàn toàn dữ liệu.
- PARTIAL: Chỉ che giấu một phần dữ liệu (ví dụ: hiển thị chỉ bốn ký tự cuối của số an sinh xã hội).
- RANDOM: Thay thế dữ liệu thật bằng dữ liệu ngẫu nhiên.
- REGEXP: Sử dụng biểu thức chính quy để xác định cách thức redacted dữ liệu.
- NONE: Không thực hiện redaction, hữu ích cho việc tạm thời vô hiệu hóa chính sách.
VÍ DỤ THỰC TẾ
Chúng ta sử dụng schema HR, với user HR làm ví dụ tính năng này:
Thực hiện unlock và đổi pass nếu chưa có (thực hiện bằng user sys nhé) sau đó kết nối vào user hr:
alter user hr ACCOUNT UNLOCK; alter user hr IDENTIFIED by oracle; connect hr/oracle;
Kiểm tra các table hiện có trong user này chúng ta thấy có 7 table;
select * from user_tables;
Chúng ta sẽ sử dụng table Employees làm ví dụ:
login vào hệ thống với user sys hoặc user có quyền DBA => ở đây tôi sử dụng user SYS
(nếu bạn sử dụng user không phải là Sys thì phải cấp quyền thực thi gói dbms_redact cho user đó từ user SYS
grant execute on sys.dbms_redact to DUONGUSER;)
TẠO POLICY CHO REDACTION: TYPE FULL
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'HR', object_name => 'employees', column_name => 'commission_pct', policy_name => 'redact_com_pct', function_type => DBMS_REDACT.FULL, expression => '1=1'); END; /
Xem thông tin redaction record tại:
SELECT * FROM REDACTION_POLICIES; select * from REDACTION_COLUMNS;
Kiểm tra kết quả trong user HR:
conn hr/oracle select * from hr.employees where commission_pct is not null;
=>> cột commission_pct đã bị che giấu đi và hoàn toàn là số 0
=>> nếu bạn sử dụng user SYS hoặc user tạo policy redaction thì dữ liệu sẽ không bị che giấu mà hiển thị giá trị thật.
Lệnh này sẽ hiển thị chi tiết quy tắc mã hoá dữ liệu:
select * from REDACTION_VALUES_FOR_TYPE_FULL;
number, binary…: sẽ hiển thị là số 0
char, nchar, vachar, nvarchar….: sẽ hiển thị là khoảng trắng
các giá trị ngày tháng …sẽ hiển thị mặc định là 01/01/01…
TẠO POLICY CHO REDACTION: TYPE PARTIAL
Trước tiên phải xoá FULL đi đã, Oracle chỉ cho phép 1 object có 1 redaction policy mà thôi
BEGIN DBMS_REDACT.drop_POLICY( object_schema => 'HR', object_name => 'employees', policy_name => 'redact_com_pct' ); END; /
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'HR', object_name => 'employees', column_name => 'email', policy_name => 'redact_email', function_type => DBMS_REDACT.PARTIAL, function_parameters => 'VVVVFVVVVFVVVVFVVVV,VVVV-VVVV-VVVV-VVVV,*,1,5', expression => '1=1'); END; /
=>> tạo policy thay thế bằng dấu * cho các ký tự
=>> xem dữ liệu trong user HR;
select * from employees;
=>> cột email đã bị che đi rồi
TẠO POLICY CHO REDACTION: TYPE RANDOM
(nhớ xoá policy cũ trước khi tạo mới)
BEGIN DBMS_REDACT.ADD_POLICY( object_schema => 'HR', object_name => 'employees', column_name => 'phone_number', policy_name => 'redact_cust_rand_vals', function_type => DBMS_REDACT.RANDOM, expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') = ''HR'''); END; /
=>> khi xem bằng user HR hoặc user nào đó được chỉ định thì trường phone_number sẽ bị random dữ liệu nhằm che giấu thông tin.
(có thể thực hiện mã hoá loại trừ
expression => 'SYS_CONTEXT(''USERENV'',''SESSION_USER'') != ''HR''');
=>> nếu không phải là user HR thì mã hoá hết => HR thì có thể xem được values gốc)
xem thông tin bằng user HR
select * from employees;
Tóm lại:
Data Redaction là một tính năng mạnh mẽ giúp bảo vệ dữ liệu nhạy cảm trong Oracle Database bằng cách che giấu hoặc làm thay đổi dữ liệu khi được truy xuất. Việc tạo và quản lý các chính sách Data Redaction có thể giúp bảo vệ dữ liệu nhạy cảm khỏi các truy vấn không được phép, đảm bảo an toàn và bảo mật cho hệ thống cơ sở dữ liệu của bạn.
Chúc anh em thành công. DuoDBA