Uso di Always Encrypted con enclave sicuri con JDBC Driver

Scaricare il driver JDBC

Questa pagina include informazioni su come sviluppare applicazioni Java usando Always Encrypted con enclave sicure e Microsoft JDBC Driver 8.2 (o versioni successive) per SQL Server.

La funzionalità enclavi sicure è un'aggiunta alla funzionalità Always Encrypted esistente. Lo scopo delle enclavi sicure è gestire le limitazioni quando si lavora con dati Always Encrypted. In precedenza, gli utenti potevano solo eseguire confronti di uguaglianza sui dati Always Encrypted e dovevano recuperare e decrittografare i dati per eseguire altre operazioni. Le enclavi sicure consentono di superare queste limitazioni, permettendo l'esecuzione di calcoli su dati di testo non crittografato all'interno di un enclave sicura sul lato server. Un'enclave sicura è un'area protetta della memoria all'interno del processo di SQL Server. Funge da ambiente di esecuzione attendibile per l'elaborazione di dati sensibili all'interno del motore di SQL Server. Un enclave sicuro viene visualizzato come black box per il resto di SQL Server e altri processi nel computer host. Non vi è alcun modo per visualizzare dati o codice all'interno dell'enclave dall'esterno, anche con un debugger.

Prerequisiti

  • Assicurarsi che nel computer di sviluppo sia installato Microsoft JDBC Driver 8.2 (o versione successiva) per SQL Server.
  • Verificare che le dipendenze dell'ambiente, ad esempio DLL, archivi di chiavi e così via, si trovino nei percorsi corretti. Always Encrypted con enclave sicuri è un componente aggiuntivo della funzionalità Always Encrypted esistente ed entrambi condividono prerequisiti simili.

Nota

Se si usa una versione precedente di JDK 8, potrebbe essere necessario scaricare e installare i file di criteri di giurisdizione di forza illimitata JCE (Java Cryptography Extension). Leggere il file leggimi incluso nel file ZIP per istruzioni sull'installazione e dettagli rilevanti sui possibili problemi di importazione/esportazione.

I file dei criteri possono essere scaricati da Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download

Configurazione di enclave sicure

Seguire l'Esercitazione: Introduzione all'uso di Always Encrypted con enclave sicure in SQL Server, Esercitazione: Introduzione all'uso di Always Encrypted con enclavi Intel SGX nel database SQL di Azure o Esercitazione: Introduzione ad Always Encrypted con le enclavi VBS nel database SQL di Azure per iniziare a usare enclave sicure. Per informazioni più dettagliate, vedere Always Encrypted con enclave sicure.

Proprietà per la stringa di connessione

Per consentire i calcoli dell'enclave per una connessione di database, è necessario impostare le parole chiave della stringa di connessione seguenti, nonché abilitare Always Encrypted.

  • enclaveAttestationProtocol: specifica un protocollo di attestazione.

    • Se si usa SQL Server e il servizio Sorveglianza host, il valore di questa parola chiave deve essere HGS.
    • Se si usa il database SQL di Azure e l'attestazione di Microsoft Azure, il valore di questa parola chiave deve essere AAS.
    • Se si usano enclave sicure in un ambiente in cui i servizi di attestazione non sono disponibili, il valore di questa parola chiave deve essere NONE. Richiede JDBC 12.2 o versione successiva.
  • enclaveAttestationUrl: specifica un URL di attestazione (endpoint di servizio di attestazione). È necessario ottenere un URL di attestazione per l'ambiente dall'amministratore del servizio di attestazione.

Gli utenti devono abilitare columnEncryptionSetting e impostare correttamente entrambe le proprietà della stringa di connessione sopra indicate per abilitare Always Encrypted con enclave sicure da Microsoft JDBC Driver per SQL Server.

Uso delle enclavi sicure

Quando le proprietà di connessione dell'enclave sono impostate correttamente, il funzionamento è trasparente. Il driver determina se la query richiede l'uso automatico di un'enclave sicura. Di seguito sono riportati alcuni esempi di query che attivano i calcoli dell'enclave. La configurazione della tabella e del database sono reperibili in Esercitazione: Introduzione all'uso di Always Encrypted con enclave sicure in SQL Server o Esercitazione: Introduzione all'uso di Always Encrypted con enclave sicure in database SQL di Azure.

Le query complesse attiveranno i calcoli dell'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
            }
        }
    }
}

Per attivare o disattivare la crittografia in una colonna vengono attivati anche i calcoli dell'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)");
}

Utenti di Java 8

Questa funzionalità richiede l'algoritmo di firma RSASSA-PSA. Questo algoritmo è stato aggiunto in JDK 11, ma non è stato eseguito il backporting a JDK 8. Gli utenti che desiderano usare questa funzionalità con la versione JDK 8 di Microsoft JDBC Driver per SQL Server devono caricare il proprio provider, che supporta l'algoritmo di firma RSASSA-PSA, o includere la dipendenza facoltativa BouncyCastleProvider. La dipendenza verrà rimossa in un secondo momento in caso di backporting dell'algoritmo di firma in JDK 8 o se termina il ciclo di vita del supporto di JDK 8.

Vedi anche

Uso di Always Encrypted con il driver JDBC