使用Talend Data Integration对.properties文件中的密码进行密码/加密和解密

Mor*_*tus 5 encryption crypt password-encryption talend

一种建议的运行作业的方法是在属性文件中保存上下文参数.像这个:

#
#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
Run Code Online (Sandbox Code Playgroud)

这非常简单实用,但问题在于密码保存清晰.

所以我正在寻找方法来轻松加密.以下是关于密码加密技术的Stack溢出中已经讨论过的两个非常有趣的问题:

但它们是Java原生的,我正在寻找更好的Talend集成.我已经在我的Talend工作中尝试了不同的方法:

所有这些技术都在一个教程(法语,抱歉)中描述,解释了如何在Talend中加密密码

但是遇到了另一个问题:用于加密/解密的密钥总是很清楚,所以如果你知道解决这一问题的好方法,我会很乐意进行实验.

小智 2

从根本上讲,应用程序可以访问的任何内容都可以通过闯入系统/接管应用程序的控制来访问。即使您使用混淆(例如 base64 或更高级),或者在密钥可用的情况下使用真正的加密(即使它们也可能被混淆)。

因此,本质上没有足够好的方法来完成您想要做的事情,更糟糕的是:它根本不存在。

那么你会做什么呢?

1. 限制权利

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

因此,将权利限制在应用程序绝对需要的范围内。

这确实应该做到,而且很容易实现。

2. 单独的用户和管理员级别访问

如果某些事情仅在用户交互后才需要,您可以使用用户提供的秘密(例如,用户的密码可以给出哈希值,并且可以对其进行异或运算,并为您提供一个并不总是存在于应用程序中的密钥,也不是配置文件)。

您可以使用此功能,例如将权限分为两个级别:普通用户级别,仅具有使应用程序为普通用户工作的最低权限,(但例如不允许管理应用程序本身的应用程序管理权限),并使用用户保存的秘密将密钥(的一部分)保留在应用程序之外,而没有管理员登录到应用程序的管理部分。

老实说,这很少能做到,也不是那么容易。

但即使有了所有这些,您基本上也必须考虑如果应用程序受到损害,对数据库的访问也会受到损害。

这也是为什么在没有采取适当预防措施的情况下,应用程序用户密码等数据不应(不得)存储在数据库中的原因。