На шаге 3 вы указываете, что вы экспортируете сертификат с сервера баз данных, чтобы обеспечить максимальную безопасность, never сохраните свой сертификат на сервере базы данных. Серверу не нужно иметь доступ к сертификату.
Если SysAdmin Логин (SQL Authentication) подключается к SSMS с дополнительного шифрования параметра Column значение = Enabled, Это показывает простые текстовые данные (ожидающие зашифрованные данные). Мое понимание таково: no другой, а затем пользователи приложений должны видеть простые текстовые данные). Может ли кому-нибудь пояснить?
Если SysAdmin подключается к SSMS с клиентской машины, у которой есть сертификат, и если у SysAdmin есть разрешение на доступ к сертификату, они будут видеть текстовые данные.
Грубо говоря, всегда шифруется предоставляет следующие гарантии безопасности, данные Plaintext будут видны только для лиц, имеющих доступ к ColumnMasterKey (сертификат)
Для разработки, Рассмотрим следующий сценарий.
Рассмотрим две машины:
- machineâ: машина, на которой SQL Server работает
- MachineT: Клиентская машина.
Рассмотрим два пользователя
UserA (это технически может быть группа пользователей, но я буду рассматривать сценарий с одним пользователем для простоты): Кто является администратором на machineâ, управление SQL-сервером и SysAdmin на SQL-сервере. Однако userA не имеет никакого доступа к MachineT и UserA не должен расшифровывать любые зашифрованные данные, хранящиеся в SQL Server на машине A (зашифрованные данные в контексте этого ответа являются данными, которые являются зашифрованный с использованием функции «Зашифрованная шина SQL Server»).
UserT (это технически может быть группа пользователей, но я буду рассматривать сценарий с одним пользователем для простоты): доверенный пользователь имеет доступ к MachineT, имеет доступ ко всем данным в база данных db, которая размещена в SQL Server по адресу MachineA. Кроме того, поскольку userT доверено, он должен иметь возможность расшифровать зашифрованные данные.
Рассмотрим SQL Server работает на machineâ имеет базы данных БД и таблицу т.
Наша цель состоит в том, чтобы обеспечить столбец, принадлежащий таблице т, скажем ssnCol, так что только userT должны быть в состоянии увидеть ssnCol в незашифрованном виде.
Цель, описанная выше, может быть достигнута с использованием следующих шагов.
- UserT журналы в MachineT.
- UserT открывает SSMS в MachineT.
- UserT подключается к SQL Server на Мачинеа
- UserT шифрует ssnCol в таблице т с помощью шагов, указанных в
Encrypt columns (configure Always Encrypted)
секции this article
- После этого шага, столбец ssnCol бы быть зашифрованным.
Когда userT шифрует ssnCol способа, описанный выше, два ключа генерируется
- ЦОК: ЦМК известного колонка мастер-ключ является ключом, который используется для шифрования CEK/с , Этот ключ хранится в хранилище сертификатов окон MachineT.
- СЕК: СЕК аки столбец ключ шифрования является ключом, который используется для шифрования ssnCol, этот ключ хранится в зашифрованном виде в SQL Server на machineâ и не сохраняется в любом месте текста.
Следовательно, для того, чтобы дешифровать ssnCol, СЕК требуется, однако, для того, чтобы расшифровать CEK, ЦМК требуется.
Поскольку ЦМК находится в хранилище сертификатов Windows, из machineT только userT может получить доступ к CMK, расшифровать СЕК и расшифровать ssnCol.
ПользовательА является администратором на machineâ, а также SysAdmin на SQL Server, но, так как он/она не имеет доступа к ЦМК, ПользовательА не может получить доступ к ssnCol в незашифрованном виде. Вы можете проверить это, используя SSMS из machineâ, войдя в систему ПользовательА и запрашивая ssnCol
Если у вас есть дополнительные вопросы, пожалуйста, поместите их в комментариях, и я могу ответить на них.
Вы говорите, что пользователь, имеющий разрешения на использование сертификата, на компьютере, который * имеет *, имеет соответствующие сертификаты, подключается к базе данных с помощью «Колонка шифрования» и может читать данные. Ничего страшного. Не имеет значения, подключается ли этот пользователь через код или SSMS. Пользователь по-прежнему выполняет то, что разрешено. –
Always Encrypted - это механизм защиты данных, а не механизм разрешений. Это мешает хакерам когда-либо считывать данные, даже если они крадут файлы базы данных или устанавливают Wireshark для захвата пакетов.Это не механизм, который запретит администратору сервера читать данные, к которым у него есть * разрешение. –
Если вы хотите ограничить административный доступ, * не * дайте права администратора сервера всем. Используйте роли с минимальными требуемыми привилегиями и предоставляйте только разрешения на ключи и сертификаты для пользователей и роли, которые требуют такого доступа. –