Шифрование значений атрибутов#
Шифрование значений атрибутов предназначено для хранения чувствительных строковых данных в зашифрованном виде. Механизм можно использовать для паролей, токенов и других учетных данных, которые необходимы системе для обращения к сторонним ресурсам и должны храниться в базе данных в зашифрованном виде.
Механизм применяется к обычным строковым атрибутам класса, JSON-атрибутам и объектным характеристикам, а также универсальным характеристикам.
Для атрибута с настроенным шифрованием значение автоматически шифруется при записи через предусмотренные для него методы доступа. Для обычных атрибутов шифрование и расшифровка выполняются сгенерированными setter и getter DPI/ROP. Для JSON-атрибутов, объектных и универсальных характеристик используются соответствующие API. Реляционные запросы и прямой доступ к базе данных автоматическую расшифровку не выполняют.
Значения шифруются с возможностью последующей автоматической расшифровки, например для использования учетных данных при обращении к внешнему сервису.
По умолчанию автоматическое шифрование атрибутов выключено.
Настройка общего механизма#
Для работы автоматического шифрования должна быть включена настройка Включено шифрование атрибутов (bEnabledFieldEncryption).
Путь: Настройка системы > Настройки и сервисы > Настройка модулей системы > Общие настройки модулей > btk > Безопасность и аутентификация.
Ранее сохраненные незашифрованные значения автоматически не преобразуются. После включения настройки они шифруются при следующей записи через предусмотренные для соответствующего атрибута методы доступа.
Признак шифрования отдельного атрибута применяется вместе с общей настройкой. При выключенной bEnabledFieldEncryption автоматическое шифрование при записи не выполняется, даже если для атрибута установлен признак шифрования.
Атрибуты класса#
После включения общей настройки откройте атрибут класса и установите признак Зашифрованный атрибут.
Путь: Сущности > Классы > нужный класс > атрибуты.
Признак Зашифрованный атрибут доступен для базовых атрибутов с типами данных:
Varchar;Text;Clob.
Примечание
Для атрибута gid механизм шифрования значений не применяется.
Для атрибутов, задаваемых в ODM, шифрование можно включить параметром isEncrypted="true":
<attr name="sPassword" attribute-type="Varchar" caption="Пароль" type="basic" isEncrypted="true"/>
Для зашифрованного атрибута при кодогенерации формируются методы доступа, которые выполняют шифрование при записи и расшифровку при чтении.
Для JSON-атрибутов и объектных характеристик шифрование и расшифровка выполняются через JObjectAttrApi.
Для поддерживаемых строковых зашифрованных атрибутов по умолчанию используется редактор editPassword, который скрывает значение в интерфейсе. Редактор используется для отображения и не выполняет шифрование.
Перед снятием признака шифрования с атрибута учитывайте представление уже сохраненных значений и при необходимости преобразуйте их. Для физического атрибута признак шифрования определяет использование механизма расшифровки в сгенерированном getter.
Универсальные характеристики#
После включения общей настройки откройте нужную универсальную характеристику и установите признак Зашифрованный атрибут.
Путь: Сущности > Универсальные характеристики.
Признак шифрования доступен для универсальной характеристики со следующими параметрами:
базовый тип;
тип данных
Varchar;одно значение;
обычное, неинтервальное значение;
постоянное значение без временной зависимости.
При изменении параметров характеристики доступность признака шифрования пересчитывается автоматически.
При записи значения универсальной характеристики через JObjectAttrApi.setUniCharValue выполняется автоматическое шифрование. При чтении через Btk_UniversalCharacteristicApi.getValue выполняется расшифровка.
Использование в прикладном коде#
Для чтения и записи зашифрованных значений используйте методы доступа соответствующего типа атрибута:
для обычных атрибутов — сгенерированные getter и setter DPI/ROP;
для JSON-атрибутов и объектных характеристик —
JObjectAttrApi;для универсальных характеристик —
JObjectAttrApi.setUniCharValueдля записи иBtk_UniversalCharacteristicApi.getValueдля чтения.
При чтении атрибута через сгенерированный getter выполняется автоматическая расшифровка. Реляционные запросы и прямой доступ к базе данных автоматическую расшифровку не выполняют.
Для прямого шифрования и расшифровки строковых значений используется ru.bitec.app.btk.security.Btk_EncryptedFieldPkg.
Пример:
import ru.bitec.app.gtk.Lang.*
import ru.bitec.app.btk.security.Btk_EncryptedFieldPkg
val encrypted = Btk_EncryptedFieldPkg().encrypt("data".ns)
val decrypted = Btk_EncryptedFieldPkg().decrypt(encrypted)
Значения encrypted и decrypted имеют тип NString.
Основные операции Btk_EncryptedFieldPkg:
Операция |
Назначение |
|---|---|
|
Шифрует непустое значение, если оно еще не имеет признака зашифрованного значения. Настройку |
|
Вызывает |
|
Расшифровывает значение поддерживаемого формата. Значение другого формата возвращает без изменений |
|
Проверяет наличие технического префикса зашифрованного значения |
Для атрибутов с настроенным автоматическим шифрованием используйте указанные выше методы доступа к значениям.