Data Redaction Oracle Database | Che giấu dữ liệu trong Oracle database

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;

word image 3294 1

word image 3294 2

word image 3294 3

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;

word image 3294 4

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;

word image 3294 5

Kiểm tra kết quả trong user HR:

conn hr/oracle

select * from hr.employees where commission_pct is not null;

word image 3294 6

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

word image 3294 7

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;

word image 3294 8

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

word image 3294 9

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

 

Datalinks.vn

Hello các bạn, tôi là Dương Nguyễn (DuoDBA - https://www.youtube.com/@DuoDBA) tác giả của blog này. Mong muốn được chia sẻ kiến thức và kinh nghiệm về cơ sở dữ liệu với những người đam mê và quan tâm đến lĩnh vực này. Tôi có tổ chức các khoá Coaching về #OracleDatabase và luyện thi #OCP thường xuyên, các bạn muốn có người đồng hành thì alo tôi nhé. Call/Zalo: 0765 871 888. Thanks you !.....
0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận