我想隐藏我用来将数据从我的RDBMS导入Hadoop集群的密码。我使用--option-files
将我的密码和用户名保存在文本文件中,但它没有受到保护。
我可以对该特定文件进行某种加密以获得更好的保护吗?
答案 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
以下是可以配置的多个参数(再次参考参考):
或者,您也可以关注Sqoop documentation page并创建一个密码别名,该别名通过CredentialProviderPasswordLoader
类的实现进行检索。您可以看到整个班级here