Использование Always Encrypted с безопасными анклавами с драйвером JDBC

Скачать драйвер 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 или более поздней версии.
  • enclaveAttestationUrl: — определяет URL-адрес аттестации (конечная точка службы аттестации). Необходимо получить URL-адрес аттестации для имеющейся среды у администратора службы аттестации.

Чтобы включить 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 завершится.

См. также раздел

Использование функции Always Encrypted с JDBC Driver