Альтернатива функций для извлечения данных из таблицы с всегда зашифрованным столбцом - PullRequest
0 голосов
/ 07 марта 2019

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

CREATE FUNCTION TestApplicantFunc 
(
   @Id [bigint]
)
RETURNS 
@TestTable TABLE 
(
   LastName [nvarchar](32)
)
AS
BEGIN
   INSERT INTO @TestTable(LastName)

   SELECT a.LastName FROM dbo.EncryptedTable as a
   WHERE a.ID = @Id
   RETURN 
END
GO

Теперь этот тип функций использовался в нескольких местах, которые трудно найти. Итак, могу ли я что-нибудь сделать и сохранить определения функций, так как может быть много критических изменений?

1 Ответ

0 голосов
/ 07 марта 2019

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

Из документации Always Encrypted (компонент Database Engine) :

Always Encrypted позволяет клиентам шифровать конфиденциальные данные внутри клиентских приложений и никогда не раскрывать ключи шифрования дляКомпонент Database Engine (база данных SQL или SQL Server).В результате Always Encrypted обеспечивает разделение между теми, кто владеет данными (и может просматривать их), и теми, кто управляет данными (но не должен иметь доступа).Обеспечивая доступ локальных администраторов баз данных, операторов облачных баз данных или других высокопривилегированных, но неавторизованных пользователей, к доступу к зашифрованным данным, Always Encrypted позволяет клиентам уверенно хранить конфиденциальные данные вне их прямого контроля.

Однако вы можете определить, где используется функция, просто выбрав из встроенной табличной функции sys.dm_sql_referencing_entities:

SELECT *
FROM sys.dm_sql_referencing_entities('dbo.TestApplicantFunc', 'OBJECT')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...