[Advanced Road] Онлайн-решение для десенсибилизации бизнес-данных на основе ShardingSphere

база данных

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

Для уже запущенных предприятий: как добиться беспрепятственной трансформации десенсибилизации прозрачным, безопасным способом с низким уровнем риска без изменения бизнес-логики и бизнес-SQL?

В поле моего зрения попала Apache ShardingSphere. Apache ShardingSphere — это экосистема, состоящая из промежуточного программного решения для распределенной базы данных с открытым исходным кодом. Она состоит из трех независимых моделей: Sharding-JDBC, Sharding-Proxy и Sharding-Sidecar (в планах). быть смешаны и развернуты с составом продукта. Все они могут обеспечивать стандартизированное разделение данных, распределенные транзакции и функции распределенного управления и могут применяться к различным сценариям приложений, таким как изоморфизм Java, гетерогенные языки, контейнеры и облачные среды.

Сейчас бизнес запущен, а открытый текст раньше хранился в базе данных. По некоторым причинам необходимо снизить чувствительность и исправить онлайн-бизнес. Чтобы решить эту проблему, необходимо рассмотреть три вопроса:

  • 1. Как снизить чувствительность большого количества исторических данных.

  • 2,Как десенсибилизировать вновь добавленные данные и сохранить их в базе данных без изменения бизнес-SQL и логики.

  • 3. Как безопасно осуществить миграцию бизнес-системы между открытым текстом и данными зашифрованного текста.

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

Во-первых, принцип десенсибилизации данных

Shadingsphere о официальной документации о десенсибилизации

Encrypt-JDBC, предоставляемый ShardingSphere, развертывается вместе с бизнес-кодом. Бизнес-стороне необходимо выполнить программирование JDBC для Encrypt-JDBC. Поскольку Encrypt-JDBC реализует все стандартные интерфейсы JDBC, бизнес-код можно использовать совместимо без дополнительных модификаций. На этом этапе все взаимодействия между бизнес-кодом и базой данных возложены на Encrypt-JDBC. Предприятиям нужно только предоставить правила десенсибилизации.В качестве моста между бизнес-кодом и базовой базой данных Encrypt-JDBC может перехватывать поведение пользователя и взаимодействовать с базой данных после изменения поведения..

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

Во-вторых, конфигурация десенсибилизации

Мы можем напрямую использовать конфигурацию yaml, чтобы объяснить настройку правил десенсибилизации.

1, конфигурация источника данных

Относится к конфигурации источника данных.

spring: 
  application:
    name: sharding-jdbc-examples
  main:
    allow-bean-definition-overriding: true
  shardingsphere:
    datasource:      #数据源配置
      names: ds
      ds:
        url: jdbc:mysql://127.0.0.1:3306/test1?useSSL=false&useUnicode=true&serverTimezone=UTC
        type: com.alibaba.druid.pool.DruidDataSource
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver

2. Конфигурация шифратора

Это относится к тому, какая стратегия шифрования используется для шифрования и дешифрования. В настоящее время ShardingSphere имеет две встроенные стратегии шифрования и дешифрования: AES/MD5. Пользователи также могут самостоятельно реализовать набор алгоритмов шифрования и дешифрования, реализовав интерфейс, предоставляемый ShardingSphere.

 encrypt:
      encryptors:
        encryptor_aes:
          type: aes  #加解密器类型,可自定义或选择内置类型:MD5/AES
          props:
            aes.key.value: 123456*  #属性配置, 注意:使用AES加密器,需要配置AES加密器的KEY属性:aes.key.value
          qualifiedColumns: t_user.password

3. Конфигурация стола десенсибилизации

Он используется, чтобы указать ShardingSphere, какой столбец в таблице данных используется для хранения данных зашифрованного текста (cipherColumn), какой столбец используется для хранения данных открытого текста (plainColumn) и какой столбец пользователь хочет использовать для записи SQL (logicColumn).

 tables:
        t_user:
          columns:
            passowrd:  #logicColumn
              plainColumn: passowrd  #plainColumn
              cipherColumn: newpassowrd  #cipherColumn
              encryptor: encryptor_aes  #加密器配置

4. Настройка свойств запроса

Когда данные открытого текста хранятся в базовой таблице базы данных, данные зашифрованного текста используются для принятия решения о том, возвращать ли данные открытого текста в таблицу базы данных или данные зашифрованного текста запроса возвращаются после расшифровки с помощью Encrypt-JDBC.

   props:
      # 打印SQL
      sql.show: true
      check:
        table:
          metadata: true
          # 是否在启动时检查分表元数据一致性
          enabled: true
      query:
        with:
          cipher:
            # 选择使用明文或者密文字段进行查询,true为密文
            column: true 

Когда эта информация настроена, шифрование данных может быть завершено.

5. Процесс десенсибилизации

Теперь давайте воспользуемся созданной ранее конфигурацией для проведения простого теста.

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

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

3. Новый бизнес и старый бизнес

1. Новый бизнес

Если старое бизнес-преобразование не используется, поле plainColumn можно опустить и использовать cipherColumn напрямую.

2. Старый бизнес

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

1. Перед переносом задачи

Перед очисткой данных используем настроенный до меня, CRUD продолжаем использовать простой, просто добавляем поле для хранения зашифрованных данных в БД,Не действуйте самостоятельно перед очисткой стоковых данных.

2. Миграция задач

Недавно добавленные данные были сохранены в столбце зашифрованного текста Encrypt-JDBC, а открытый текст в столбце открытого текста.После того, как исторические данные зашифрованы и очищены деловой стороной, зашифрованный текст также сохраняется в столбце зашифрованного текста. То есть текущая база данных содержит как открытый текст, так и зашифрованный текст. В то же время мы можем в любое время изменить, являются ли запрашиваемые данные открытым текстом или зашифрованным текстом, путем настройки.

Перед проверкой надежности системы и правильности данных не удаляйте непосредственно данные открытого текста, на всякий случай.

2. После переноса задачи

Благодаря требованиям кафедры аудита безопасности, в целом невозможно для бизнес-систем сохранить столбцы открытого текста и столбцов зашифрованного текста базы данных синхронно и навсегда. Нам нужно удалить данные столбца на открытом воздухе после того, как система стабильна. После этого наша конфигурация таблицы десенсибилизации также может быть изменена. (Конечно, в особых случаях данные на открытом тексте также могут быть оставлены для резервного копирования, что следует учитывать фактическую ситуацию)

 tables:
        t_user:
          columns:
            passowrd:  #logicColumn
              cipherColumn: newpassowrd  #cipherColumn
              encryptor: encryptor_aes  #加密器配置

4. Причины выбора ShardingSphere для десенсибилизации

  • 1. ShardingSphere обеспечивает автоматизированный и прозрачный процесс десенсибилизации данных, и нам не нужно обращать внимание на детали промежуточной реализации десенсибилизации.
  • 2 Предоставляет множество встроенных сторонних (AKS) стратегий десенсибилизации, которые можно использовать с простой настройкой.
  • 3. Обеспечить API-интерфейс стратегии десенсибилизации, пользователи могут реализовать интерфейс для использования пользовательской стратегии десенсибилизации для десенсибилизации данных.
  • 4. Поддержка переключения между различными стратегиями десенсибилизации.
  • 5. Для онлайн-бизнеса данные открытого текста и данные зашифрованного текста могут храниться синхронно, а столбец открытого текста или столбец зашифрованного текста можно использовать для запроса через конфигурацию. Он может реализовать безопасную и прозрачную миграцию данных до и после шифрования без изменения бизнес-запроса SQL.

Конечно, использование функции десенсибилизации + функция подтаблицы подбиблиотеки, часть специального SQL не поддерживает, правительство также предоставило спецификацию для запросов SQL дляканонический адрес

Всем привет,я Нанджу практикую джаву два с половиной года.Следующее мой WeChat.Друзья,кому нужны предыдущие карты или хотят обменяться опытом,могут общаться друг с другом.

Нуждающиеся студенты могут добавить мой официальный аккаунт, последние статьи в будущем будут в нем впервые, или вы можете попросить у меня ментальную карту