Использование Always Encrypted с безопасными анклавами с драйвером JDBC
Эта страница содержит сведения о том, как разрабатывать приложения Java с использованием Always Encrypted с безопасными анклавами и Microsoft JDBC Driver 8.2 (или более поздней версии) для SQL Server.
Безопасные анклавы являются дополнением к существующей функции Always Encrypted. Их назначением является устранение ограничений при работе с данными Always Encrypted. Ранее пользователи могли выполнять применительно к данным Always Encrypted только сравнение на равенство. Для выполнения других операций им приходилось извлекать и расшифровывать данные. Безопасные анклавы устраняют это ограничение, позволяя выполнять вычисления с данными в виде обычного текста внутри безопасного анклава на стороне сервера. Безопасный анклав — это защищенная область памяти в процессе SQL Server. Он выступает в качестве доверенной среды выполнения для обработки конфиденциальных данных в подсистеме SQL Server. Безопасный анклав представляет собой "черный ящик" на фоне остальной части SQL Server и других процессов на главном компьютере. Просмотреть данные или код внутри анклава невозможно, даже с помощью отладчика.
Необходимые компоненты
- Убедитесь в том, что на компьютере разработки установлен драйвер Microsoft JDBC Driver 8.2 (или более поздней версии) для SQL Server.
- Убедитесь, что зависимости среды, такие как библиотеки DLL, хранилища ключей и т. д., расположены в соответствующих путях. Always Encrypted с безопасными анклавами — это надстройка для существующего компонента Always Encrypted с аналогичными предварительными требованиями.
Примечание.
Если вы используете более старую версию JDK 8, может потребоваться скачать и установить файлы политики юрисдикции неограниченной стойкости Java Cryptography Extension (JCE). Обязательно прочитайте содержащийся в ZIP-архиве файл сведений, чтобы получить инструкции по установке и сопутствующие сведения о возможных проблемах экспорта и импорта.
Файлы политики можно скачать на странице скачивания файлов политики юрисдикции неограниченной стойкости Java Cryptography Extension (JCE) 8.
Настройка безопасных анклавов
Руководство по началу работы с always Encrypted с безопасными анклавами в SQL Server, руководство. Начало работы с анклавами Always Encrypted с анклавами Intel SGX в База данных SQL Azure или учебником. Начало работы с анклавами Always Encrypted с анклавами VBS в База данных SQL Azure, чтобы приступить к работе с безопасными анклавами. Дополнительные сведения см. в разделе Always Encrypted с безопасными анклавами.
Свойства строки подключения
Чтобы включить вычисления анклава для подключения к базе данных, необходимо не только включить Always Encrypted, но и задать следующие ключевые слова строки подключения.
enclaveAttestationProtocol — определяет протокол аттестации.
- Если вы используете SQL Server и службу защиты узлов (HGS), значение этого ключевого слова должно быть
HGS
. - Если вы используете База данных SQL Azure и Microsoft Аттестация Azure, значение этого ключевого слова должно быть
AAS
. - Если вы используете безопасные анклавы в среде, в которой недоступны службы аттестации, это ключевое слово должно иметь значение
NONE
. Требуется JDBC 12.2 или более поздней версии.
- Если вы используете SQL Server и службу защиты узлов (HGS), значение этого ключевого слова должно быть
enclaveAttestationUrl: — определяет URL-адрес аттестации (конечная точка службы аттестации). Необходимо получить URL-адрес аттестации для имеющейся среды у администратора службы аттестации.
- Если вы используете службу защиты SQL Server и узла (HGS), ознакомьтесь с разделом "Определение и предоставление общего доступа к URL-адресу аттестации HGS".
- Если вы используете База данных SQL Azure и Microsoft Аттестация Azure, ознакомьтесь с URL-адресом аттестации для политики аттестации.
- Если вы используете протокол аттестации
NONE
, это свойство можно оставить пустым.
Пользователи должны включить columnEncryptionSetting и правильно задать оба указанных выше свойства строка подключения, чтобы включить Always Encrypted с безопасными анклавами из драйвера Microsoft JDBC для SQL Server.
Работа с безопасными анклавами
Если свойства подключения к анклавам заданы правильно, функция будет работать прозрачно. Драйвер будет определять, должен ли запрос автоматически использовать безопасный анклав. Ниже приведены примеры запросов, активирующих вычисления анклава. Вы можете найти настройку базы данных и таблицы в руководстве. Начало работы с Always Encrypted с безопасными анклавами в SQL Server или учебнике. Начало работы с Always Encrypted с безопасными анклавами в База данных SQL Azure.
Полнофункциональные запросы инициируют вычисления анклава:
private static final String URL = "jdbc:sqlserver://<server>:<port>;encrypt=true;user=<username>;password=<password>;databaseName=ContosoHR;columnEncryptionSetting=enabled;enclaveAttestationUrl=<attestation-url>;enclaveAttestationProtocol=<attestation-protocol>;";
try (Connection c = DriverManager.getConnection(URL)) {
try (PreparedStatement p = c.prepareStatement("SELECT * FROM Employees WHERE SSN LIKE ?")) {
p.setString(1, "%6818");
try (ResultSet rs = p.executeQuery()) {
while (rs.next()) {
// Do work with data
}
}
}
try (PreparedStatement p = c.prepareStatement("SELECT * FROM Employees WHERE SALARY > ?")) {
((SQLServerPreparedStatement) p).setMoney(1, new BigDecimal(0));
try (ResultSet rs = p.executeQuery()) {
while (rs.next()) {
// Do work with data
}
}
}
}
Включение шифрования для столбца также инициирует вычисления анклава:
private static final String URL = "jdbc:sqlserver://<server>:<port>;encrypt=true;user=<username>;password=<password>;databaseName=ContosoHR;columnEncryptionSetting=enabled;enclaveAttestationUrl=<attestation-url>;enclaveAttestationProtocol=<attestation-protocol>;";
try (Connection c = DriverManager.getConnection(URL);Statement s = c.createStatement()) {
s.executeUpdate("ALTER TABLE Employees ALTER COLUMN SSN CHAR(11) NULL WITH (ONLINE = ON)");
}
Пользователи Java 8
Для этой функции требуется алгоритм подписи RSASSA-PSA. Он был добавлен в JDK 11, но не был портирован в JDK 8. Пользователи, желающие использовать эту функцию с версией JDK 8 драйвера Microsoft JDBC для SQL Server, должны загрузить собственный поставщик, который поддерживает алгоритм подписи RSASSA-PSA или включить BouncyCastleProvider
необязательную зависимость. Эта зависимость будет удалена позже, если алгоритм подписи будет портирован в JDK 8 или жизненный цикл поддержки JDK 8 завершится.