Поделиться через


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

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

См. также

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