2015-12-21 130 views
5

运行作业的一种建议方法是将上下文参数保存在属性文件中。 赞一个:使用Talend数据集成加密和加密.properties文件中的密码

# 
#Wed Dec 16 18:23:03 CET 2015 
MySQL_AdditionalParams=noDatetimeStringSync\=true 
MySQL_Port=3306 
MySQL_Login=root 
MySQL_Password=secret_password_to_cipher 
MySQL_Database=talend MySQL_Server=localhost 

这是很容易的和有用的,但这个问题是所有的口令都保存在明确的。

所以我正在寻找轻松加密的方法。 这里有两个在堆栈溢出有关口令加密的工艺已经非常讨论的问题insteresting:

但他们是Java本机和我在寻找一个更好的整合了Talend。我已经在我的工作了Talend尝试了不同的方式:

所有这些工艺都是d在教程旁切(法语,抱歉)解释如何crypt passwords in Talend

但遇到另一个问题:按键用来加密/ uncipher总是清晰的,所以如果你知道好的方法来解决这个问题我会乐于尝试它

回答

2

从根本上讲,任何应用程序都可以触及到的东西可以被有人侵入系统/接管应用程序的控制。 即使您使用模糊处理(例如base64或更高级的),或者可用密钥(即使它们也可能被模糊处理)的真实加密。

因此,基本上没有足够的方法来做你想做的事情,甚至更糟糕的事情:它根本无法存在。

那么你会怎么做呢?

1。限制权利

MySQL_Login=root是一个很大的问题......该应用程序的妥协将导致数据库(及其数据)立即妥协。

因此,限制应用程序绝对需要的权利。

这应该是真的,而且很容易实现。

2。单独的用户和管理员级别的访问权限

如果用户交互后,才需要某些东西,你可以使用由用户提供的密码(例如,用户的密码可以给一个散列,并且可以XOR运算与并获得你是一个并不总是出现在应用程序或配置文件中的密钥)。

你可以使用这个例如在两个级别分离出权限:普通用户级别,它只具有使普通用户可以工作的最小权限(但不包括允许管理应用程序本身的应用程序管理权限),并保留秘密由用户在应用程序的管理部分没有登录管理员的情况下保持(粘贴)该应用程序以外的密钥。

这是很少做到诚实,也不是那么容易。

但即使所有你基本上考虑访问,例如,如果应用程序受到攻击,数据库将受到攻击。

这也就是为什么应用程序用户密码等数据不应存储在数据库中没有适当的预防措施。

+0

感谢您的回答。事实上,login = root已经留给了我的测试,我从不在生产中使用它。但强调是一个很好的观点。我会尝试一下xor-ed的情况。我已经给你“接受”的答案,以便在到期前得到赏金,但我会期待你已经尝试过的真实用例。不管怎么说,还是要谢谢你。 – MordicusEtCubitus

+0

要到2个级别的访问: – swa66

+0

用户和管理员作为一个例子,但你可以添加更多的,尽管它很快变得复杂 送一个密码,您明明白白存储到您的数据库中他人的最低权限,允许读存取权限的用户 为管理员访问创建第二个用户/密码。现在,对于这一权利的每个用户,在用户表中添加一列与异或管理员passwd文件的数据库和自己的密码哈希”。所以每当你应用程序可以看到明文的密码,它生成的管理员密码并保存它在会话中使用的会话 – swa66