SQL Server 2016 - возможно ли объединить два всегда зашифрованных столбца nvarchar?

Я создал таблицу, используя:

create table dbo.employee(firstname nvarchar(100) null,lastname nvarchar(100) null)

Вставлены образцы данных, используя:

insert into dbo.employee values('Sachin','Tendulkar')
insert into dbo.employee values('Rohit','Sharma')
insert into dbo.employee values('Virendra','Sehwag')
insert into dbo.employee values('Irfan','Pathan')

Затем я использовал всегда зашифрованный мастер, чтобы зашифровать оба столбца этой таблицы с помощью SSMS v17. И теперь я пытаюсь связать имя с фамилией следующим образом:

select concat(firstname, lastname) from dbo.employee

И это дает мне ошибку ниже:

Конфликт типов операндов: nvarchar (100), зашифрованный с помощью (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', column_encryption_key_data_name), column_encryption_key_data_name

Когда я пробую это:

select firstname + lastname from dbo.employee

Это дает следующую ошибку:

Несоответствие схемы шифрования столбцов / переменных firstname, lastname. Схема шифрования для столбцов / переменных: (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'SampleDB_CEK', выражение column_encryption_key_database_name = 'строка_cryption_key_database_name будет' = 'выражение_encryption_key_database_name будет' = 'имя_подключения_данных_sampleD будет' PLAINTEXT ') (или слабее).

Любая помощь приветствуется.


person CleanBold    schedule 29.05.2017    source источник
comment
ожидает, что это будет (encryption_type = 'PLAINTEXT') (или более слабый). Разве этой информации недостаточно?   -  person user6144226    schedule 29.05.2017


Ответы (1)


Объединение в зашифрованные столбцы запрещено. В настоящее время единственная операция, доступная для зашифрованных столбцов, - это равенство. Это связано с тем, что у SQL Server нет ключа.

Возможно, вам придется реализовать эту логику в клиентском приложении.

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

Детерминированное шифрование всегда генерирует одно и то же зашифрованное значение для любого заданного значения обычного текста. Использование детерминированного шифрования позволяет выполнять точечный поиск, объединение на равенство, группировку и индексацию по зашифрованным столбцам. Однако, но также может позволить неавторизованным пользователям угадывать информацию о зашифрованных значениях, исследуя шаблоны в зашифрованном столбце, особенно если существует небольшой набор возможных зашифрованных значений, таких как Истина / Ложь или регион Север / Юг / Восток / Запад. Детерминированное шифрование должно использовать сопоставление столбцов с порядком сортировки binary2 для символьных столбцов.

Рандомизированное шифрование использует метод, который менее предсказуемо шифрует данные. Рандомизированное шифрование более безопасно, но предотвращает поиск, группировку, индексирование и соединение по зашифрованным столбцам.

person Nikhil Vithlani - Microsoft    schedule 30.05.2017