我正在尝试通过sqlContext.read.format("json")
方法连接到Oracle。一切都很顺利,但在创建JDBC String时,我必须在字符串中指定数据库的用户名和密码:
val jdbcString = "jdbc:oracle:thin:USERNAME/PASSWORD@//HOSTNAME:PORT/SID"
但是,我在HDFS上有一个包含密码的jceks
文件。我想知道是否有任何方法可以利用该文件连接到JDBC而不是纯文本密码?就像在Sqoop中一样,我们可以这样做:
sqoop import -Dhadoop.security.credential.provider.path=jceks://hdfs/data/credentials/oracle.password.jceks
感谢。
答案 0 :(得分:3)
This was achieved using 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
答案 1 :(得分:0)
Oracle JDBC瘦驱动程序不支持从jceks文件中提取密码。它支持钱包(密码可以存储在钱包中)。