Uso de Always Encrypted con enclaves seguros con el controlador JDBC
En esta página se proporciona información sobre cómo desarrollar aplicaciones Java mediante Always Encrypted con enclaves seguros y Microsoft JDBC Driver 8.2 (o posterior) para SQL Server.
La característica de enclaves seguros es una adición a la característica Always Encrypted existente. El propósito de los enclaves seguros es solucionar las limitaciones cuando se trabaja con datos de Always Encrypted. Anteriormente, los usuarios solo podían realizar comparaciones de igualdad en los datos de Always Encrypted y tenían que recuperar y descifrar los datos para realizar otras operaciones. Los enclaves seguros solucionan esta limitación al permitir realizar cálculos en datos de texto no cifrado dentro de un enclave seguro en el lado del servidor. Un enclave seguro es una región de memoria protegida dentro del proceso de SQL Server. Actúa como un entorno de ejecución de confianza para procesar datos confidenciales dentro del motor de SQL Server. Un enclave seguro aparece como una caja negra para el resto de SQL Server y otros procesos en la máquina servidor. No hay ninguna manera de ver los datos ni el código que se encuentran dentro del enclave desde el exterior, incluso si se cuenta con un depurador.
Requisitos previos
- Asegúrese de que Microsoft JDBC Driver 8.2 (o posterior) para SQL Server está instalado en el equipo de desarrollo.
- Compruebe que las dependencias del entorno, como los archivos DLL, KeyStores, etc., se encuentran en las rutas de acceso correctas. Always Encrypted con enclaves seguros es un complemento de la característica de Always Encrypted existente y comparte requisitos previos similares.
Nota:
Si usa una versión anterior de JDK 8, es posible que tenga que descargar e instalar los archivos de Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy. Asegúrese de leer el archivo Léame incluido en el archivo zip para obtener instrucciones de instalación y detalles relevantes sobre los posibles problemas de importación o exportación.
Los archivos de directivas se pueden descargar desde Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files 8 Download
Configuración de enclaves seguros
Siga el Tutorial: Introducción al uso de Always Encrypted con enclaves seguros en SQL Server, Tutorial: Introducción al uso de Always Encrypted con enclaves de Intel SGX en Azure SQL Database o Tutorial: Introducción al uso de Always Encrypted con enclaves de VBS en Azure SQL Database para empezar a trabajar con enclaves seguros. Para información más detallada, consulte Always Encrypted con enclaves seguros.
Propiedades de cadena de conexión
Para habilitar los cálculos de enclave para una conexión de base de datos, debe establecer las siguientes palabras clave de cadena de conexión, además de habilitar Always Encrypted.
enclaveAttestationProtocol: especifica un protocolo de atestación.
- Si utiliza SQL Server y el Servicio de protección de host (HGS), el valor de esta palabra clave debe ser
HGS
. - Si utiliza Azure SQL Database y Microsoft Azure Attestation, el valor de esta palabra clave debe ser
AAS
. - Si usa enclaves seguros en un entorno donde los servicios de atestación no están disponibles, el valor de esta palabra clave debe ser
NONE
. Requiere JDBC 12.2 o posterior.
- Si utiliza SQL Server y el Servicio de protección de host (HGS), el valor de esta palabra clave debe ser
enclaveAttestationUrl: especifica una dirección URL de atestación (un punto de conexión de servicio de atestación). Debe obtener una dirección URL de atestación para su entorno por parte del administrador del servicio de atestación.
- Si usa SQL Server y el Servicio de protección de host (HGS), vea Determinación y uso compartido de la dirección URL de atestación de HGS.
- Si usa Azure SQL Database y Microsoft Azure Attestation, vea Determinación de la dirección URL de atestación de la directiva de atestación.
- Si usa
NONE
el protocolo de atestación, esta propiedad se puede dejar en blanco.
Los usuarios deben habilitar columnEncryptionSetting y establecer correctamente las dos propiedades de cadena de conexión anteriores para habilitar Always Encrypted con enclaves seguros desde el Microsoft JDBC Driver para SQL Server.
Uso de los enclaves seguros
Cuando las propiedades de conexión de enclave se establecen correctamente, la característica funcionará de forma transparente. El controlador determinará de forma automática si la consulta tiene que usar un enclave seguro. Los siguientes son ejemplos de consultas que desencadenan cálculos de enclave. Puede encontrar la configuración de la base de datos y la tabla en Tutorial: Introducción al uso de Always Encrypted con enclaves seguros en SQL Server o Tutorial: Introducción al uso de Always Encrypted con enclaves seguros en Azure SQL Database.
Las consultas enriquecidas desencadenarán los 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
}
}
}
}
Al alternar el cifrado en una columna, también se desencadenan los 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)");
}
Usuarios de Java 8
Esta característica requiere el algoritmo de firma RSASSA-PSA. Este algoritmo se agregó en JDK 11, pero no se ha incorporado a JDK 8. Los usuarios que quieran utilizar esta característica con la versión JDK 8 de Microsoft JDBC Driver para SQL Server deben cargar su propio proveedor, que admite el algoritmo de firma RSASSA-PSA, o bien incluir la dependencia opcional BouncyCastleProvider
. La dependencia se quitará en una fecha posterior si JDK 8 incorpora el algoritmo de firma o si finaliza el ciclo de vida de soporte técnico de JDK 8.