2015-11-17 2 views
0

Возможно ли использовать функцию «Всегда зашифровано» с функцией безопасности на уровне строк в SQL Server 2016? И каким-то образом зашифровать строки с помощью разных EncryptionKeys в отношении строк, которые должны быть просмотрены конкретным пользователем?Строчное шифрование SQL Server 2016

+0

Каковы ваши цели? Безопасность всегда зашифрована и уровень уровня - это совершенно разные вещи. RLS фильтрует результирующий набор на основе вашей функции фильтра, поэтому user_x видит только данные, которые ему разрешено видеть. RLS не шифрует пользовательские данные. AE будет шифровать данные пользователя. Независимо от того, что RLS возвращает пользователю, без ключа все пользователи видят зашифрованный текст. При использовании вместе вы должны быть осторожны, как вы пишете функцию RLS. Если это зависит от зашифрованного некоторого столбца AE, производительность вашего приложения, скорее всего, пострадает. Если это не так, то это будет работать с обычными служебными данными AE и ограничениями – SQLmojoe

+0

@SQLmojoe: моя цель подобна ... если пользователь A имеет несколько строк, а у пользователя B есть другие строки ... с RLS мы можем убедиться, что A видит, что только Ароматы и B видят только BRows. Но моя цель заключалась бы в том, чтобы зашифровать Арубы ключом A и BR, чтобы зашифровать другим ключом по B в базе данных. –

ответ

0

Это помогает. Короткий ответ, сегодня нелегко сделать с AE & RLS.

В настоящее время AE охватывает колонку; вы шифруете весь столбец с помощью специального ключа шифрования столбца (CEK). Вы можете зашифровать несколько столбцов в таблице, каждая из которых имеет свой собственный CEK, но она все еще содержит столбцы. Вы не можете логически группировать строки и шифровать их своими ключами с текущей реализацией AE. Если это действительно важно для вас, вы можете отправить предложение команде через https://connect.microsoft.com/SQLServer/feedback/

При этом, помимо соблюдения некоторых требований к нормативной или корпоративной политике, вы не получите многого от своего текущего предлагаемого дизайна. Если у вас малое количество пользователей (или групп пользователей), следовательно, очень небольшое количество групп строк, вы быстро столкнетесь с распространением СЕК. Нелегко управлять, но все же утомительно и потенциально много работать. Например, каждому пользователю или группе пользователей нужны свои ключи или секрет, чтобы получить доступ к ключу, нажатому на их приложение или рабочую станцию. Сложность и/или много движущихся частей означает больше рисков неудачи. Кроме того, это может быть «весело» в течение аудиторского сезона (в зависимости от вашего аудитора, конечно).

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

Реализовано правильно, AE соответствует требованиям №1. Без ключа все, что вы видите, - это зашифрованный текст. Конечно, вы можете переборщить его или найти недостатки в алгоритме шифрования или реализации SQL Server, но есть FAR, FAR более простые способы, чем то, что Голливуд хочет, чтобы мы верили.

RLS делает адрес # 2 в большинстве случаев. Реализация выполняется на уровне процессора запросов, поэтому обход RLS чрезвычайно затруднен; в RLS должна быть ошибка, чтобы это было возможно. Если ваш фильтр RLS основан на незашифрованном столбце (и это действительно так), то нет никаких шансов, что кто-то может даже обнюхать ваши секреты из памяти/сети, если ваш клиент не будет скомпрометирован.

Таким образом, оба требования выполнены, хотя у вас есть только 1 CEK. Это делает вашу жизнь намного проще в долгосрочной перспективе с меньшей площадью поверхности для управления. Это почти всегда приводит к созданию более безопасной среды. Имея отдельные ключи, вы приобретаете дополнительный слой, который отлично работает на бумаге для углубленной защиты, но на практике ваши усилия принесут гораздо больше в других областях (например, оповещение, обучение пользователей и т. Д.).

Смежные вопросы