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

时间:2016-07-12 06:55:26

标签: hadoop sqoop

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

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

2 个答案:

答案 0 :(得分:3)

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

  

您应该将密码保存在具有400个权限的用户主目录中的文件中,并使用--password-file参数指定该文件的路径,并且是输入凭据的首选方法。然后,Sqoop将从文件中读取密码,并使用安全方法将其传递给MapReduce集群,而不会在作业配置中公开密码。包含密码的文件可以位于本地FS或HDFS上。例如:

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

检查演习docs以获取更多详细信息。

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

答案 1 :(得分:2)

以前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(默认为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并创建一个密码别名,该别名通过CredentialProviderPasswordLoader类的实现进行检索。您可以看到整个班级here