我正在尝试通过sqlContext.read.format("json")
方法连接到Oracle。一切都很好,但是在创建JDBC字符串时,我必须在字符串中指定数据库的用户名和密码:
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
谢谢。
最佳答案
这是使用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