如何保护Sqoop中的密码和用户名?

How to protect password and username in Sqoop?

我想隐藏我用来将数据从 RDBMS 导入 Hadoop 集群的密码。我正在使用 --option-files 将我的密码和用户名保存在文本文件中,但它不受保护。

我可以对该特定文件进行某种加密以获得更好的保护吗?

向数据库提供密码的安全方式。

You should save the password in a file on the users home directory with 400 permissions and specify the path to that file using the --password-file argument, and is the preferred method of entering credentials. Sqoop will then read the password from the file and pass it to the MapReduce cluster using secure means with out exposing the password in the job configuration. The file containing the password can either be on the Local FS or HDFS. For example:

$ sqoop import --connect jdbc:mysql://database.example.com/employees \
--username venkatesh --password-file ${user.home}/.password

查看演习 docs 了解更多详情。

此外,您可以使用 -P 选项 从控制台读取密码

看来这个问题之前已经解决了 here, 也在此 hortonworks page 上进行了描述,主要包括创建和 .enc 文件。您还需要配置几个参数,例如密钥以显示加密。

sqoop import \
-Dorg.apache.sqoop.credentials.loader.class=org.apache.sqoop.util.password.CryptoFileLoader \
-Dorg.apache.sqoop.credentials.loader.crypto.passphrase=sqoop2 \
--connect jdbc:mysql://example.com/sqoop \
--username sqoop \
--password-file file:///tmp/pass.enc \
--table tbl

这里有多个可以配置的参数(再次参考以下):

  • org.apache.sqoop.credentials.loader.class - 凭证加载器
  • org.apache.sqoop.credentials.loader.crypto.alg – 用于解密文件的算法(默认为 AES/ECB/PKCS5Padding)。
  • org.apache.sqoop.credentials.loader.crypto.salt – 用于派生带有密码的密钥的盐(默认为 SALT)。
  • org.apache.sqoop.credentials.loader.crypto.iterations – PBKDF2 迭代次数(默认为 10000)。
  • org.apache.sqoop.credentials.loader.crypto.salt.key.len – 派生密钥长度(默认为 128)。
  • org.apache.sqoop.credentials.loader.crypto.passphrase 用于导出密钥的密码。

或者您也可以关注Sqoop documentation page and create a password alias that gets retrieved with an implementation of CredentialProviderPasswordLoader class. You can see the whole class here