Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Security 在sqoop中传递密码的安全方法_Security_Batch File_Sqoop - Fatal编程技术网

Security 在sqoop中传递密码的安全方法

Security 在sqoop中传递密码的安全方法,security,batch-file,sqoop,Security,Batch File,Sqoop,我担心sqoop批处理中数据库密码的安全性(无交互输入) 在过去,对于sqoop批处理,您唯一能做的就是使用--password在命令行上传递它,但是使用简单的ps命令就很容易读取密码 现在我们有了--password file选项,但它需要将未加密的密码存储在磁盘上,这并不是真正的“安全”做法,也不方便为单个参数设置单个文件 我正在考虑将加密密码存储在配置文件中,然后动态解密,存储在临时文件中,设置权限(使用chmod命令),调用sqoop,然后删除该文件。。。但我可能会错过一条不那么麻烦的路

我担心sqoop批处理中数据库密码的安全性(无交互输入)

在过去,对于sqoop批处理,您唯一能做的就是使用
--password
在命令行上传递它,但是使用简单的
ps
命令就很容易读取密码

现在我们有了
--password file
选项,但它需要将未加密的密码存储在磁盘上,这并不是真正的“安全”做法,也不方便为单个参数设置单个文件


我正在考虑将加密密码存储在配置文件中,然后动态解密,存储在临时文件中,设置权限(使用chmod命令),调用sqoop,然后删除该文件。。。但我可能会错过一条不那么麻烦的路?如何处理它?

--password file
选项可用之前,我为sqoop做了一个补丁,在使用
-p
命令时,以非交互方式从输入流中读取密码

这样,我就可以从配置文件中取消密码,并使用stdin管道使用该密码调用sqoop,而无需使用可以看到普通密码的文件或命令行

编辑文件
src/java/org/apache/sqoop/SqoopOptions.java

securePasswordEntry
功能代码替换为

private String securePasswordEntry() {
try {
  return new String(System.console().readPassword("Enter password: "));
}
// PATCH Bouygues Telecom - read password from pipe if launched in non-interactive mode
catch (NullPointerException e) {    
    try {
        final java.io.BufferedReader reader = new java.io.BufferedReader(
                            new java.io.InputStreamReader(System.in));
        return reader.readLine();
    }
    catch (java.io.IOException excep) {      
        LOG.error("It seems that you have launched a Sqoop metastore job via");
        LOG.error("Oozie with sqoop.metastore.client.record.password disabled.");
        LOG.error("But this configuration is not supported because Sqoop can't");
        LOG.error("prompt the user to enter the password while being executed");
        LOG.error("as Oozie tasks. Please enable sqoop.metastore.client.record");
        LOG.error(".password in sqoop-site.xml, or provide the password");
        LOG.error("explicitly using --password in the command tag of the Oozie");
        LOG.error("workflow file.");
    }
    return null;
  }
}

麻烦的是必须重新修补Sqoop的每个新版本。。。我可能应该提交一份jira(对我的补丁是否会被考虑的信心很低),或者按照您想要的方式转到--password file选项。

@abeaamase在2015年3月的stackoverflow 23916985回复中给出了最佳答案。本质上,我们应该升级到sqoop>1.4.5,并使用java密钥库(JKES)、org.apache.sqoop.util.password.CryptoFileLoader或在我们自己的类中定义的加载程序

提供的CryptoFileLoader的缺点是假定加密密码短语和salt将作为-D参数提供,以驱动系统属性(可通过ps进行窥探)或配置XML中的纯文本

我最初是在2015年3月的博客中发现这些参数的,之前我没有发现(它没有标题,但如果你看步骤3第2部分,你会发现它)


令人惊讶的是,这不是推荐的做法,也没有出现在sqoop 1.4.5文档中。

谢谢-似乎比文件更好,您应该尝试发布jirate这里也有一个相关的帖子: