SQL всегда зашифрован против SQL динамического маскирования данных - PullRequest
0 голосов
/ 27 августа 2018

Я не могу выбрать один из двух способов скрыть данные в одном столбце в БД SQL Server.

1. SQL Always Encrypted

2. SQL Dynamic Data Masking

После прочтения статей для обоихНасколько я понимаю, Always Encrypted может быть более безопасным, чем Dynamic Data Masking, поскольку хранящиеся данные зашифрованы, а не надевают маску поверх пароля.

Однако каковы последствия, когда речь заходит о ежедневном использовании в этом сценарии, если пользователь просто хочет скрыть поле пароля от администраторов базы данных?

Данные, которые будут скрыты: Пароль

Функции с использованием столбца Пароль: Сброс пароля, изменение пароля, вставка новой строки пароля при создании нового пользователя

ЛюбойСовет будет признателен.


PS. Первоначально я планировал использовать SHA1 + Salt-хеширование для полей пароля и хранение хеш-значений вместо пароля.Тем не менее, если требования просто скрыть поле в БД, я нахожу, что могут быть достаточны другие 2 вышеупомянутых метода.

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Ни при каких обстоятельствах пароль никогда не должен храниться в таблице базы данных или где-либо еще в этом отношении, точка.

Вы должны хешировать пароль и сохранить хешированное значение. Подумайте об использовании SHA 2 или выше с солением.

См. NIST для более подробной информации: https://csrc.nist.gov/Projects/Hash-Functions

SQL Server 2008+ поддерживает до SHA2-512:

https://docs.microsoft.com/en-us/sql/t-sql/functions/hashbytes-transact-sql?view=sql-server-2017

DECLARE @HashThis NVARCHAR(4000)
SET @HashThis = CONVERT(NVARCHAR(4000),'dslfdkjLK85kldhnv$n000#knf');  
SELECT HASHBYTES('SHA2_512', @HashThis);

Чтобы узнать, как можно посолить пароль, см. Статью ниже. Стоит отметить, что хеширование и соление должны обрабатываться на прикладном уровне, поскольку администратор базы данных может видеть пароль, который солит в SQL Profiler. Будьте очень осторожны.

https://www.mssqltips.com/sqlservertip/3293/add-a-salt-with-the-sql-server-hashbytes-function/

Дополнительная информация:

https://www.mssqltips.com/sqlservertip/4037/storing-passwords-in-a-secure-way-in-a-sql-server-database/

Заключительный пункт. Если по какой-либо причине вы выполняете это упражнение в качестве средства аутентификации пользователей в веб-приложении, вам следует поискать модули аутентификации для указанной среды приложения. Например, ASP.NET поставляется с системой Microsoft Identity 2.0, которая полностью выполняет процесс аутентификации.

https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.1&tabs=visual-studio

0 голосов
/ 27 августа 2018

Если вы хотите скрыть PW от администратора БД, то динамическое маскирование данных не будет рассматриваться.Это просто маскирует его на уровне представления.

AlwaysEncrypted переносит ответственность за шифрование на клиентское приложение, что означает, что шифрование и дешифрование обрабатываются вне приложения, в результате чего данные, вообще говоря, не читаются администратором базы данных.

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

РЕДАКТИРОВАТЬ

Всегда зашифрованный доступен только в 2016 году для начинающих, но шифрование на уровне столбцов доступно с 2005 года. Но, чтобы ответить на ваш вопрос, нет, администратор базы данных нене нужно иметь ключи от королевства.AE был разработан для обработки шифрования и дешифрования на уровне драйвера.Приведенная ниже информация взята из официального справочного экзамена 70-764 Виктора Исакова :

. На высоком уровне архитектура AE работает, как показано на рисунке 1-5:

  1. Клиентское приложение выдает параметризованный запрос.Он использует новую настройку шифрования столбца = включено;опция в строке подключения
  2. Улучшенный драйвер ADO.NET опрашивает ядро ​​базы данных, используя системную хранимую процедуру [sp_describe_parameter_encryption], чтобы определить, какие параметры предназначены для зашифрованных столбцов.Для каждого параметра, который потребует шифрования, драйвер извлекает алгоритм шифрования и другую информацию, которая будет использоваться на этапе шифрования
  3. Драйвер использует главный ключ столбца (CMK) для шифрования значений параметра перед отправкой зашифрованного текста вядро базы данных.
  4. ядро ​​базы данных извлекает набор результатов, прикрепляя соответствующие метаданные шифрования к любым зашифрованным столбцам, и отправляет их обратно клиентскому приложению.Данные зашифрованы как в состоянии покоя в базе данных, так и во время полета от ядра базы данных к клиентскому приложению.
  5. Драйвер клиентского приложения расшифровывает все зашифрованные
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...