使用sparkjdbc指定jceks文件

xcitsw88  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(387)

我正在尝试通过 sqlContext.read.format("json") 方法。一切都很顺利,但在创建jdbc字符串时,我必须在字符串中指定数据库的用户名和密码:

val jdbcString = "jdbc:oracle:thin:USERNAME/PASSWORD@//HOSTNAME:PORT/SID"

但是,我有一个 jceks hdfs上存在包含密码的文件。我想知道是否有任何方法可以利用该文件连接到jdbc而不是纯文本密码?就像在sqoop中,我们可以做:

sqoop import -Dhadoop.security.credential.provider.path=jceks://hdfs/data/credentials/oracle.password.jceks

谢谢。

uurv41yg

uurv41yg1#

oraclejdbc瘦驱动程序不支持从jceks文件提取密码。它支持钱包(密码可以存储在钱包中)。

zdwk9cvp

zdwk9cvp2#

这是通过使用 CredentialProviderFactory .

import org.apache.hadoop.security.alias.CredentialProviderFactory

val conf = new org.apache.hadoop.conf.Configuration()
val alias = "password.alias"
val jceksPath = "jceks://hdfs/user/data/alias/MySQL.password.jceks"

conf.set(CredentialProviderFactory.CREDENTIAL_PROVIDER_PATH, jceksPath)

//getPassword Returns Array[Char]
val password = conf.getPassword(alias).mkString

相关问题