【发布时间】:2022-01-14 04:48:47
【问题描述】:
我正在开发一个基于 Java 客户端的代码,该代码尝试使用私钥连接到雪花 JDBC 我在网上搜索并找到了这个链接:
https://docs.snowflake.com/en/user-guide/jdbc-configure.html 和其他链接,都需要使用密码
还有我的代码
Properties p = new Properties();
p.setProperty(USER, jdbcDetails.username);
String privateKey = jdbcDetails.getPrivateKey().replace("-----BEGIN ENCRYPTED PRIVATE KEY-----\n", "");
privateKey = privateKey.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;
似乎此代码对连接有效,但在与我们的 DBA 交谈后 他告诉我他可以在不指定密码的情况下进行连接
使用这个命令:
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"
如何使用 jdbc 与私钥进行连接 - 并且无需密码?
【问题讨论】:
-
您是指使用带密码短语的密钥和使用不带密码的密钥吗?两者都是可能的,并且记录在案here
标签: java jdbc snowflake-cloud-data-platform private-key