grails - 在datasource.groovy中使用编解码器规范隐藏数据库密码不起作用

标签 grails groovy

我正在通过将数据库密码隐藏在datasource.groovy中

dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
username = "root"
password = "q59YgJCdHw3dshwlsa=="
passwordEncryptionCodec = DESCodec
dbname="mydbname"
}
跟随动脉:http://jira.grails.org/browse/GRAILS-3620
我单独运行groovy编解码器类,以得到如下所示的加密字符串:
groovy grails-app/utils/DESCodec.groovy mypassword_string_text。
但是在将DESCodec类放到实用程序包中后,当我尝试启动服务器时,它将无法启动,但会直接关闭,而当我直接输入正确的密码并注释掉编解码器和加密的字符串时,它将启动。我假设它找不到编解码器类/配置中我缺少的其他任何东西,例如指定编解码器类需要引号或任何路径更改,或者我应该更改算法,因为DESCodec类是该类中的最后一个编解码器类关联。
我正在努力使配置针对特定环境和外部化,但是在连接数据库之前,我仍然需要在此先加密密码,然后再解密。

最佳答案

我认为,执行此操作的最佳方法是外部化特定于环境的配置(尤其是密码,但URL,电子邮件地址等),然后在目标计算机的文件系统上使用适当的权限来保护配置文件。

在Config.groovy中(例如):

grails.config.locations = [
    "file:/etc/${appName}/conf/db.properties"
]

并在配置文件中:
dataSource.username = "root"
dataSource.password = "secret"

我通常对生产配置执行此操作,但为了方便起见,将dev/test配置保留在Config.groovy中。在dev/test中运行时,如果找不到引用的配置文件,则只会在启动时得到警告。如果找到它,它将覆盖Config.groovy中的内容

这具有额外的优点,即如果任何产品环境配置发生更改,则不需要重新编译和重新部署war文件,您只需更改配置文件并重新启动应用程序即可。

关于grails - 在datasource.groovy中使用编解码器规范隐藏数据库密码不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8017027/

相关文章:

java - 像encodeAsBase64方法一样,Grails提供加密/解密方法吗?

java - Spock测试中是否可以有一个全局设置方法?

mysql - 在groovy脚本SoapUI中设置ssh后面的mysql连接

xml - 如何屏蔽 xml 文件中的敏感数据?

grails - 创建grails定制ResourceMapper

grails - Grails资源插件-如何获取生成的URL?

grails - 从组合框 onChange 事件传递两个参数

grails - 开始使用 Mail 插件构建 Grails 2 Web 应用程序时出错

jenkins - 我可以将 groovy 脚本从相对目录导入 Jenkinsfile 吗?

groovy - 如何调用 Groovy 覆盖的名为 getProperties() 的可变 Java 方法