Como usar Always Encrypted com enclaves seguros com o JDBC Driver

Baixar o JDBC Driver

Esta página fornece informações sobre como desenvolver aplicativos do Java usando o Always Encrypted com enclaves seguros e o Microsoft JDBC Driver 8.2 (ou superior) para SQL Server.

O recurso de enclaves seguros é uma adição ao recurso Always Encrypted existente. A finalidade dos enclaves seguros é resolver as limitações ao trabalhar usando dados do Always Encrypted. Anteriormente, os usuários podiam fazer apenas comparações de igualdade dos dados do Always Encrypted e precisavam recuperar e descriptografar os dados para fazer outras operações. Os enclaves seguros solucionam essas limitações, permitindo realizar cálculos em dados de texto não criptografado em um enclave seguro no lado do servidor. Um enclave seguro é uma região protegida da memória dentro do processo do SQL Server. Ele atua como um ambiente de execução confiável para processar dados confidenciais dentro do mecanismo do SQL Server. Um enclave seguro é exibido como uma caixa preta para o restante do SQL Server e outros processos no computador de hospedagem. Não há nenhuma maneira de exibir os dados ou o código dentro do enclave de fora, mesmo com um depurador.

Pré-requisitos

  • O Microsoft JDBC Driver 8.2 (ou superior ) para SQL Server deve estar instalado em seu computador de desenvolvimento.
  • Verifique se as dependências do ambiente, como DLLs, repositórios de chaves e assim por diante, estão nos caminhos corretos. Always Encrypted com enclaves seguros é um complemento para o recurso Always Encrypted existente e eles compartilham pré-requisitos semelhantes.

Observação

Se estiver usando uma versão anterior do JDK 8, poderá ser necessário baixar e instalar os arquivos de política de jurisdição de força ilimitada do JCE (Java Cryptography Extension). Leia o arquivo Leiame incluído no arquivo zip para instruções de instalação e detalhes relevantes sobre problemas possíveis de importação/exportação.

Os arquivos de política podem ser baixados em Download dos arquivos de política de jurisdição de força ilimitada do JCE (Java Cryptography Extension) 8

Como configurar os enclaves seguros

Siga Tutorial: Introdução ao uso de Always Encrypted com enclaves seguros no SQL Server, Tutorial: Introdução ao uso de Always Encrypted com enclaves Intel SGX no Banco de Dados SQL do Azure ou Tutorial: Introdução ao Always Encrypted com enclaves VBS no Banco de Dados SQL do Azure para começar a usar enclaves seguros. Para obter informações mais detalhadas, confira Always Encrypted com enclaves seguros.

Propriedades de cadeia de conexão

Para habilitar computações de enclave para uma conexão de banco de dados, você precisará definir as palavras-chave da cadeia de conexão a seguir, além de habilitar o Always Encrypted.

  • enclaveAttestationProtocol – especifica um protocolo de atestado.

    • Se você estiver usando SQL Server e o HGS (Serviço Guardião de Host), o valor desta palavra-chave deverá ser HGS.
    • Se você estiver usando Banco de Dados SQL do Azure e o Atestado do Microsoft Azure, o valor dessa palavra-chave deverá ser AAS.
    • Se você estiver usando enclaves seguros em um ambiente em que os serviços de atestado não estejam disponíveis, o valor dessa palavra-chave deverá ser NONE. Requer JDBC 12.2 ou posterior.
  • enclaveAttestationUrl: – especifica uma URL de atestado (um ponto de extremidade de serviço de atestado). Você precisará obter uma URL de atestado para seu ambiente do administrador de serviços de atestado.

Os usuários devem habilitar columnEncryptionSetting e definir corretamente ambas as propriedades da cadeia de conexão acima para habilitar o Always Encrypted com enclaves seguros do Microsoft JDBC Driver para SQL Server.

Como trabalhar com enclaves seguros

Quando as propriedades de conexão do enclave forem definidas corretamente, o recurso funcionará de maneira transparente. O driver determinará se a consulta requer o uso de um enclave seguro automaticamente. Veja a seguir exemplos de consultas que disparam cálculos de enclave. Você pode encontrar a configuração do banco de dados e da tabela no Tutorial: Introdução ao uso de Always Encrypted com enclaves seguros no SQL Server ou Tutorial: Introdução ao uso de Always Encrypted com enclaves seguros no Banco de Dados SQL do Azure.

As consultas avançadas dispararão cálculos de enclave:

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
            }
        }
    }
}

Alternar a criptografia em uma coluna também disparará cálculos de enclave:

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)");
}

Usuários do Java 8

Esse recurso requer o algoritmo de assinatura RSASSA-PSA. Esse algoritmo foi adicionado ao JDK 11, mas não houve back-port para o JDK 8. Os usuários que desejam usar esse recurso com o JDK versão 8 do Microsoft JDBC Driver para SQL Server devem carregar o próprio provedor, que é compatível com o algoritmo de assinatura RSASSA-PSA, ou incluir a dependência opcional BouncyCastleProvider. A dependência será removida posteriormente se o JDK 8 fizer backport do algoritmo de assinatura ou se o ciclo de vida de suporte do JDK 8 terminar.

Confira também

Como usar Always Encrypted com o JDBC Driver