Миграция Oracle на SQL Серверное шифрование с пользовательской функциональностью DBMS_CRYPTO - PullRequest
0 голосов
/ 20 апреля 2020

Мы переносим данные объемом несколько ТБ с Oracle на SQL Сервер. Однако одно поле содержит пользовательский код Oracle DBMS_CRYPTO, который шифрует определенное число в зашифрованное поле по причинам GDPR.

Функция шифрования Oracle такова:

create or replace function F_HASH(field in number)
return varchar2 deterministic
is
  l_encryption integer := DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5;
  l_result raw(100);
  l_key varchar2(32) := to_char(field) + 'RANd0MsTrinG' + to_char(field)
begin
  l_result := sys.dbms_crypto.Encrypt(utl_raw.cast_to_raw(convert(to_char(field),'AL32UTF8')), l_encryption, utl_raw.cast_to_raw(l_key));
  return to_char(l_result)
end f_hash;

Из того, что я понял, l_encryption является целым числом, основанным на определенных алгоритмах шифрования в пакете Oracle DBMS_CRYPTO. l_key - это какой-то соленый ключ, основанный на поле с 'raND0mStriNg'. Шифрование происходит в l_result на основе поля , l_encryption и l_key .

Теперь мы можем перенести это поле без проблем к SQL серверу. Мы также можем предварительно рассчитать все эти значения в Oracle и поместить их в SQL Сервер и использовать их в качестве ссылки для будущих значений полей. Тем не менее, мы все еще хотели бы выполнить вычисление шифрования в новой среде базы данных.

Кто-нибудь знает, если SQL Сервер имеет эквивалентную (набор) формулу (e), которая может использоваться, которая имитирует это Oracle функциональность?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...