Анонимизация базы данных или как быть уверенным, что ты не нарушаешь закон “О персональных данных”

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

В настоящее время практически все ИТ-продукты работают с персональной информацией пользователя: ФИО, телефон, e-mail, паспортные и другие идентифицирующие данные. Для  обеспечения защиты прав и свобод, человека и гражданина при обработке его персональных данных в Российской Федерации существует Федеральный закон от 27.07.2006 N 152-ФЗ “О персональных данных”.

Согласно пункту 2 статьи 5 обработка персональных данных должна ограничиваться достижением конкретных, заранее определенных и законных целей, а в статье 6 установлено, что обработка персональных данных осуществляется с согласия субъекта персональных данных. Все это накладывает определенные ограничения на разработку программных продуктов и заставляет разработчиков думать о возможных последствиях несоблюдения норм законодательства.

Хочется заметить, что во многих случаях для непосредственной разработки личные данные пользователя не важны, необходима сама структура данных, их полнота и количество. По этой причине, а также в рамках соблюдения закона, персональные данные пользователя можно анонимизировать, чем и пришлось заниматься в рамках своей профессиональной деятельности. 

Под анонимизацией в рамках статьи стоит понимать процесс изменения данных введенных пользователем и сохраненных в БД на программно сгенерированные данные, которые по виду и типу совпадают с реальными, но не имеют отношения к конкретному пользователю.  О том, как была организована работа по этому вопросу и какой в итоге получился результат и будет эта статья.

Начало законопослушного программиста

Прежде чем приступить к описанию процесса анонимизации базы данных, опишу задачу, которая была мне поставлена:

  1. Подключить и использовать библиотеку django-gdpr-assist.

  2. Реализовать локальный плагин для Flake8, который проверял бы корректность анонимизации данных.

  3. Написать manage.py команду для анонимизации базы данных.

В своей работе я использую Django Rest Framework, по этой причине ниже представленный код будет реализован на языке программирования Python. Структура статьи будет соответствовать задаче, описанной выше, а в конце поделюсь мыслями, к которым пришел при ее выполнении и ссылкой на код плагина. Также приведу код модели, с которой мы будем работать.

from django.db import models
from django.utils.translation import gettext_lazy as _
from django_nova_users.models import User
from rules.contrib.models import RulesModelBase, RulesModelMixin


class Account(RulesModelMixin, models.Model, metaclass=RulesModelBase):
  """Аккаунт."""

    user = models.OneToOneField(
        User,
        on_delete=models.CASCADE,
        related_name='account',
    )
    photo = models.ImageField(
        _('аватар'),
        upload_to='media',
        blank=True,
        null=True,
    )
    birth_date = models.DateField(
        _('дата рождения'),  
        blank=True,  
        null=True,
    )
    passport_series = models.CharField(
        _('серия паспорта'),
        max_length=4,
        blank=True,
    )
    passport_number = models.CharField(
        _('номер паспорта'),
        max_length=4,
        blank=True,
    )

    class Meta(object):
        verbose_name = _('аккаунт')
        verbose_name_plural = ('аккаунты')

    def str(self):
        return self.user.full_name

Использование библиотеки django-gdpr-assist для анонимизации данных

Общий регламент защиты персональных данных (General Data Protection Regulation, GDPR) — постановление Европейского Союза, направленное на возможность дать гражданам контроль над собственными персональными данными.

Не смотря на то, что Россия не входит в Европейский союз, Федеральный закон № 152 “О персональных данных” содержит в себе ключевые принципы данного положения, а рассматриваемая библиотека позволяет из соблюсти: анонимизировать личные данные пользователя.

Данная библиотека работает следующим образом:

  1. Создается база данных gdpr_log, которая состоит из двух таблиц: таблица, где содержится информация о миграциях и таблица-журнал, где фиксируется действие, приложение, модель и pk объекта надо которым осуществлено действие. По умолчанию записи в журнале создаются при анонимизации экземпляра или при использовании команды anonymise_db данной библиотеки.

  2. В базе данных, которая являются стандартной (default) в проекте, создается таблица gdpr_assist_privacyanonymised, где также фиксируются объекты, которые подверглись изменению.

  3. Процесс анонимизации представляет собой изменение определенных данных, которые хранятся в стандартной (default) базе данных на программно-сгенерированные данные. 

  4. Данные, которые были изменены в ходе процесса анонимизации, нельзя привести к первоначальному виду.

Установка и настройка данной библиотеки не займет много времени и хорошо описана в официальной документации, перейдем сразу к вопросам ее использования. GDPR-assist позволяет анонимизировать определенные поля модели двумя способами:

  1. Автоматическая регистрация через определение параметра конфиденциальности в PrivacyMeta классе модели.

  2. Ручная регистрация через использование функции gdpr_assist.register(<ModelClass>, [<PrivacyMetaClass>]).

После изучения документации я решил воспользоваться первым способом для анонимизации данных, но в ходе его реализация я столкнулся с проблемой: в модели не был доступен атрибут _privacy_meta. В ходе некоторых манипуляций мне так и не удалось получить доступ к данному атрибуту, поэтому я воспользовался вторым способом: использовал функцию gdpr_assist.register().

Анонимизация полей, указанных в переменной fields внутри class PrivacyMeta может происходить по умолчанию, а может быть переопределена пользовательским анонимайзером через метод класса PrivacyMeta anonymise<field_name> (для генерирования данных я использую библиотеку Faker).

Реализация локального плагина для Flake8 по контролю анонимизации данных

Изначально, я хотел написать статью только о том, как я реализовывал испытывал мучения и страдал плагин для Flake8, но после, не найдя чего-то похожего, решил рассказать все, что удалось узнать в ходе выполнения задачи. 

Кто-то из вас может задаться вопрос причем тут анонимизация БД и плагин? При разработке мы часто меняем модели данных, удаляем и добавляем поля. Плагин контролирует разработку, позволяет программисту не держать в голове тонну информации, а сконцентрироваться на поставленной задаче. Разрабатываемый плагин будет учитывать изменения, вносимые в модели данных и позволит не забыть анонимизировать данные, идентифицирующие пользователя, а также подскажет как правильно это делать.

Написание плагина для flake8 у меня отняло много времени, сил и нервов, но по итогу я сделал для себя некоторые выводы, о которых поделюсь в самом конце. Теперь от лирики перейдем к делу! Мой путь начался с поиска информации в Интернете и ее изучении. Самое полезное что мне удалось найти, и что стало моей отправной точкой:

  1. Видео о написании плагина на flake8 и официальная документация.

  2. Первоначальная информация об абстрактном синтаксическом дереве и официальная документация модуля ast.

  3. Статья How to write Flake8 plugins

Источник: https://habr.com/ru/post/654719/


Интересные статьи

Интересные статьи

В этой статье я расскажу о том, как реализовать работу с UART через DMA в freeRTOS. Приступим! Рейтинг 0 Просмотры 43 Добавить в закладки 0
Профессиональную сферу DWH (Data Warehouse, или, по-нашему, хранилище данных) отличает высокая технологичность, а также огромное многообразие используемых решений. Крупны...
В прошлой статье мы описали эксперимент по определению минимального объема вручную размеченных срезов для обучения нейронной сети на данных сейсморазведки. Сегодня мы продолжаем эту тему, выбирая...
Телеметрия давно стала горячо обсуждаемой темой с момента, когда Microsoft выпустил первую версию Windows 10. Microsoft решил глубоко интегрировать сбор данных в операционную систему — да так глу...
Содержание Часть 1 — Задача двух тел Часть 2 — Полу-решение задачи двух тел Часть 3 — Ужепочти-решение задачи двух тел Второй закон Кеплера Всем привет! В прошлый раз мы остановилис...