Механізм класифікації даних

Сторінка технічної документації є баченням майбутньої реалізації, актуальність якого може бути застарілою.

Під класифікацією даних мається на увазі можливість визначати приналежність певних даних до конкретних категорій із відповідними механізмами обробки кожної з них. До таких категорій належать Персональні (дані що однозначно визначають певну особу: такі як РНОКПП, адреса, тощо), Конфіденційні (наприклад, дані доступні лише для внутрішнього використання представниками юридичної особи), тощо.

Визначення певних даних як таких, що мають певну класифікацію відбувається на рівні створення моделі даних реєстру через Liquibase XML шаблон

data classification
Figure 1. Імплементація механізму класифікації даних

XML шаблон для класифікації даних

В наведеному нижче прикладі створюється таблиця FOP для зберігання інформації по фізичним особам підприємцям із визначенням двох полів (RNOKPP та address) як таких, що містять персональні дані. Для цього використовується атрибут classify у тегу column.

<createTable name="fop" ext:historyFlag="true">
    <column name="fop_id"  type="UUID">
        <constraints nullable="false" primaryKey="true" primaryKeyName="pk_fop_id"/>
    </column>
    <column name="name" type="TEXT"/>
    <column name="rnokpp" type="TEXT" ext:classify="private"/>
    <column name="address" type="TEXT" ext:classify="private"/>
</createTable>

Структури бази даних

Для таблиці з класифікованими даними окремо створюється набір службових полів. Тому на етапі предеплойменту додаємо наступні внутрішні типи даних. Додатково, в таблицю метаданих ddm_liquibase_metadata вноситься інформація про наявність класифікованих даних у створюваній таблиці.

Службові типи для класифікації даних

Перелік категоріий класифікації
CREATE TYPE typ_classification_enum AS ENUM ('private', 'confidential');
Тип для визначення поля як такого що містить класифіковані дані
CREATE TYPE typ_classification AS (
    data_column_name TEXT,
    data_classification typ_classification_enum
                                   );
Тип для визначення ролей, що мають доступ до класифікованих даних
CREATE TYPE typ_access_role AS (
    data_column_name TEXT,
    access_role TEXT []
                                );

Кожен з перерахованих вище композитних типів містить в собі назву колонки, до якої відноситься інформація, зазначена в іншому полі.

Службові поля таблиць із класифікованими даними

Створюємо в таблиці три додаткових службових поля, що являють собою масив об’єктів новостворених типів: dсm_classification та dсm_access_role. Поле subject_id є посиланням на таблицю суб’єктів. Для поля dcm_classification автоматично встановлюється значення по замовчуванню — перелік полів, що містять класифіковані дані, та відповідна категорія з XML-шаблону. Решта службових полів отримує пустий масив в якості значення по замовчуванню.

Приклад скрипта створення таблиці за заданим шаблоном
CREATE TABLE FOP (
    fop_id UUID CONSTRAINT pk_fop_id PRIMARY KEY,
    name TEXT,
    rnokpp TEXT,
    address TEXT,
    dcm_classification typ_classification [] default  '{"(\"rnokpp\",\"Private\")","(\"address\",\"Private\")"}',
    subject_id UUID,
    dcm_access_role typ_access_role [] default '{ }',
    CONSTRAINT fk_fop_subject_id
        FOREIGN KEY (subject_id)
                 REFERENCES subject(subject_id)
);
Службові поля механізму класифікації даних мають префікс dcm_ (Data Classification Model)
Table 1. Приклад таблиці з даними
fop_id name rnokpp address dcm_classification subject_id dcm_access_role

fd942b70-1300-4822-8f56-7dea087397d0

ФОП "Хмельницький Б. М."

3498274364

03061 м. Київ, вул. Бориславська 6, кв. 99

[ (rnokpp, Private), (address, Private) ]

1a103626-3941-437a-8dc4-19ccc40f9e17

[(rnokpp, [Officer_Level1] ), ( address, [Officer_Level1, Officer_Level2] ) ]

d3f73a12-c0f8-4c01-89eb-ec7f3323258d

ФОП "Грушевський С. М."

2463766388

02002, м. Київ, вул. Андрія Аболмасова 2, кв 66

[ (rnokpp, Private), (address, Private) ]

4c22bfcf-eebe-4813-bf97-5b253d2c32f7

[ NULL ]

…​

…​

…​

…​

…​

…​

…​

Обмеження прав доступу

Поле dcm_access_role містить набір ролей, що має право доступатись та змінювати значення у класифікованих полях. Даний механізм дозволяє керувати доступом до даних на рівні рядків.

Права доступу ролей, зазначених на цьому рівні мають вищий пріоритет, ніж карта доступу RBAC.

Визначення ролей для доступу до класифікованих даних виконується окремим бізнес-процесом.