Использование 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 в базе данных Azure SQL или Учебник. Начало работы с Always Encrypted с анклавами VBS в Azure SQL Database, чтобы приступить к работе с безопасными анклавами. Дополнительные сведения см. в разделе 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
, это свойство можно оставить пустым.
Чтобы включить Always Encrypted с безопасными анклавами из Microsoft JDBC Driver для SQL Server, пользователям необходимо включить параметр columnEncryptionSetting и правильно задать оба приведенных выше свойства строки подключения.
Работа с безопасными анклавами
Если свойства подключения к анклавам заданы правильно, функция будет работать прозрачно. Драйвер будет определять, должен ли запрос автоматически использовать безопасный анклав. Ниже приведены примеры запросов, активирующих вычисления анклава. Сведения о настройке базы данных и таблицы см. в статье Руководство. Начало работы с использованием Always Encrypted с безопасными анклавами в SQL Server или Руководство. Начало работы с Always Encrypted с безопасными анклавами в базе данных Azure SQL.
Полнофункциональные запросы инициируют вычисления анклава:
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. Пользователи, которые хотят использовать эту функцию с версией Microsoft JDBC Driver для SQL Server для JDK 8, должны либо загрузить собственный поставщик, поддерживающий алгоритм подписи RSASSA-PSA, либо включить дополнительную зависимость BouncyCastleProvider
. Эта зависимость будет удалена позже, если алгоритм подписи будет портирован в JDK 8 или жизненный цикл поддержки JDK 8 завершится.