【问题标题】:Specifying jceks file with Spark JDBC使用 Spark JDBC 指定 jceks 文件
【发布时间】:2017-08-01 12:52:24
【问题描述】:

我正在尝试通过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

谢谢。

【问题讨论】:

    标签: hadoop apache-spark jdbc apache-spark-sql


    【解决方案1】:

    这是使用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
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 我在 sqooping 时使用 jceks 文件,没有任何问题。这个问题与 Hadoop 和 Spark 的关系比 Oracle 更密切。
      猜你喜欢
      • 2016-08-06
      • 2021-04-30
      • 1970-01-01
      • 2018-02-02
      • 2020-03-14
      • 2022-01-06
      • 2015-06-09
      • 1970-01-01
      • 2017-11-01
      相关资源
      最近更新 更多