Похоже, вы используете Always Encrypted для шифрования этого столбца.Одним из заметных ограничений в этом случае является то, что
Запросы могут выполнять сравнение на равенство для столбцов, зашифрованных с использованием детерминированного шифрования, но без других операций (например, больше / меньше, чем, сопоставление с шаблоном с использованием оператора LIKE * (1009 * или арифметические операции).
В вашем случае вы используете шифрование RANDOMIZED
, поэтому вы даже не можете выполнить сравнение на равенство!
Чтобы выполнить запрос, ядро SQL Server должно расшифровать всех ваших данных .Допустим, это будет неэффективно.А поскольку у движка нет доступа к ключам шифрования, эта операция должна выполняться вне движка.В SQL Server 2016/2017 этот запрос даже невозможно было выполнить.Вы должны были получить все данные на клиенте, выполнить расшифровку и выполнить поиск локально.Но поскольку вы используете SQL Server 2019, я предполагаю, что вы хотите воспользоваться новой функциональностью Secure Enclaves .Security Enclaves обеспечивает поддержку расширенных вычислений (в настоящее время в режиме предварительного просмотра), что позволит сопоставлять шаблоны с зашифрованными столбцамиНо они по умолчанию отключены, и вы должны явно включить их.
Сначала проверьте, поддерживаются ли на вашем сервере анклавы безопасности.Выполните этот запрос:
SELECT [name], [value], [value_in_use] FROM sys.configurations
WHERE [name] = 'column encryption enclave type'
Если поддерживается, вы получите одну строку (по умолчанию с 0 значениями).Чтобы включить его, выполните:
EXEC sys.sp_configure 'column encryption enclave type', 1
RECONFIGURE
Перезапустите свой экземпляр и выполните первый запрос, чтобы подтвердить, что они включены.Теперь вам нужно включить расширенные вычисления для зашифрованных столбцов, включив глобальный флаг трассировки 127:
DBCC traceon(127,-1)
Однако это не позволит вам выполнить сопоставление с образцом для существующих зашифрованных столбцов.Это можно сделать только в том случае, если столбцы зашифрованы с помощью главного ключа столбца с поддержкой анклавов (установлено свойство ENCLAVE_COMPUTATIONS в метаданных главного ключа столбца в базе данных).Однако свойство ENCLAVE_COMPUTATIONS главного ключа столбца является неизменным - его нельзя изменить после предоставления ключа.Так что, скорее всего, вам нужно будет заменить CMK на новый, с поддержкой анклава (который указывается, когда вы генерируете новый ключ ).
В конце я быхотел бы еще раз сказать, что даже если это возможно, это не обязательно означает, что вы должны это сделать.Это чрезвычайно тяжелая операция.В общем, сопоставление с образцом строк является тяжелым, не может использовать индексы для этого типа сопоставления, и теперь, кроме того, все ваши данные должны быть расшифрованы!Это звучит как очень плохая идея.Не делай этого!Если вы пытаетесь найти зашифрованные данные, это обычно означает, что ваш дизайн имеет недостатки.В конце концов, эти данные должны быть зашифрованы по причине.