Как зашифровать / расшифровать данные в некоторых столбцах таблицы, и когда вставляется новая запись, она также должна быть зашифрована
Я знаю, как это, чтобы вставить новую запись
INSERT INTO dbo.Customer_data (Customer_id, Customer_Name, Credit_card_number)
VALUES (25665, 'mssqltips4', EncryptByKey( Key_GUID('SymmetricKey1'), CONVERT(varchar,'4545-58478-1245') ) );
но я хочу вставить новую запись с нормальным оператором вставки, который должен быть зашифрован. например:
INSERT INTO dbo.Customer_data (Customer_id, Customer_Name, Credit_card_number)
VALUES (25665, 'mssqltips4','4545-58478-1245') ) );
1 ответ
Несколько месяцев назад у меня была похожая ситуация. В таблице, содержащей личные данные, некоторые столбцы должны быть зашифрованы, но эта таблица используется в унаследованном приложении и имеет много ссылок.
Итак, вы можете создать отдельную таблицу для хранения зашифрованных данных:
CREATE TABLE [dbo].[Customer_data_encrypted]
(
[customer_id] PRIMARY KEY -- you can create foreign key to the original one, too
,[name] VARBANRY(..)
,[cretit_card_numbe] VARBINARY(..)
);
Затем создайте INSTEAD OF INSERT UPDATE DELETE
Триггер на исходной таблице. Логика в триггере проста:
- при удалении удалить из обеих таблиц
- при обновлении / вставке - зашифровать данные и вставить в новую таблицу; использовать какую-то маску для исходной таблицы (например,
***
или же43-****-****-****
)
Затем выполните первоначальную миграцию, чтобы переместить данные из исходной таблицы в новую, а затем замаскируйте их.
Выполнение вышеуказанных шагов приятно, потому что:
- каждая вставка / обновление исходной таблицы продолжают работать
- Вы можете создать триггер с
EXECUTE AS OWNER
чтобы иметь доступ к симметричным ключам и вносить изменения непосредственно в инструкцию T-SQL, не открывая сертификаты или пользователями, которые не имеют к ним доступа - во всех ссылках reads вы собираетесь получить данные маски, так что вы не беспокоитесь о критическом нарушении приложения
- триггер дает вам возможность легко создавать и изменять информацию
Это зависит от вашей среды и потребностей бизнеса, потому что для одной из таблиц я сохранил зашифрованное значение в виде нового столбца, а не отдельной таблицы. Итак, выберите то, что вам больше подходит.