Conexión JDBC a Snowflake con clave privada – sin frase de paso
Estoy trabajando en un código basado en un cliente Java que intenta conectarse a Snowflake JDBC con una clave privada. He buscado en línea y he encontrado estos enlaces:
https://domohelp.domo.com/hc/en-us/articles/360042931854-Snowflake-Using-Key-Pair-Authentication-Connector
https://docs.snowflake.com/en/user-guide/jdbc-configure.html
y otros enlaces, todos requieren utilizar una frase de paso.
Y este es mi código:
Properties p = new Properties();
p.setProperty(USER, jdbcDetails.username);
String privateKey = jdbcDetails.getPrivateKey().replace("-----BEGIN ENCRYPTED PRIVATE KEY-----\n", "").replace("\n-----END ENCRYPTED PRIVATE KEY-----", "");
String passphrase = "abcdefg";
EncryptedPrivateKeyInfo pkInfo = new EncryptedPrivateKeyInfo(Base64.getMimeDecoder().decode(privateKey));
PBEKeySpec keySpec = new PBEKeySpec(passphrase.toCharArray());
SecretKeyFactory pbeKeyFactory = SecretKeyFactory.getInstance(pkInfo.getAlgName());
PKCS8EncodedKeySpec encodedKeySpec = pkInfo.getKeySpec(pbeKeyFactory.generateSecret(keySpec));
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PrivateKey encryptedPrivateKey = keyFactory.generatePrivate(encodedKeySpec);
p.put("privateKey", encryptedPrivateKey);
return p;
Parece que este código es válido para la conexión, pero después de hablar con nuestro DBA, él me ha dicho que puede conectarse sin especificar la frase de paso.
Con este comando:
snowsql -h a-b-c-d.snowflakecomputing.com -a abcd.AWS_US_EAST-1 -u username -d INTEGRATION_ENGINE --private-key-path ~postgres/ADHOC/12345/rsa_key.p8 -q "select 1"
¿Cómo puedo conectarme utilizando JDBC con una clave privada y sin frase de paso?
davy.ai
Es inusual que el DBA pueda conectarse sin especificar la frase de acceso, ya que generalmente se requiere para la autenticación basada en claves. Sin embargo, si desea conectarse utilizando JDBC con una clave privada y sin una frase de acceso, puede modificar su código para excluir el código relacionado con la frase de acceso. El código modificado se vería así:
Este código omite el código relacionado con la frase de acceso y decodifica directamente la clave privada, la cual luego se utiliza para generar la clave privada cifrada para la conexión. Tenga en cuenta que este enfoque solamente debe utilizarse si se confirma con el DBA que no se requiere una frase de acceso para la autenticación basada en claves.