我正在尝试创建一个ANT脚本,以便为多个环境自动执行某些数据库部署。我已经让脚本工作了,它将事情部署到SQL实例。
但是,由于运行环境的性质以及由于多个安全要求,我需要确保安全地存储连接属性。
理想情况下,在运行ant任务时,密码将永久保持加密/模糊,并且仅在内存中进行解析/解码(以避免任何竞争条件漏洞)。话虽如此,我愿意接受满足类似要求的其他建议,即如果可能的话,不提供纯文本密码。
我对ANT很陌生,所以我缺乏经验来对行业认可的实现这些要求的方式做出正确判断。
我查看了ANT文档,但找不到任何可能表明某种形式的加密/解密任务的内容。
这是我到目前为止所做的。
settings.prop
<project name="MyProject">
<property name="sql.address" value="127.0.0.1" />
<property name="sql.username" value="dbUser" />
<property name="sql.password" value="dbPassword" />
<property name="sql.database" value="db" />
</project>
db_up.xml
<project name="MyProject" default="compile">
<include buildfile="settings.prop">
<property name="sql.connectionString" value="Provider=SQLOLEDB;Server=${sql.address}; User Name=${sql.username};Password=${sql.password};Initial Catalog=${sql.database};">
<target name="deploy">
<echo message="Connecting to SQL server and creating database.">
<foreach item="File" property="sql.script">
<in>
<items>
<include name=".\create_database.sql">
<include name=".\create_first_table.sql">
<include name=".\create_second_table.sql">
</items>
</in>
<do>
<echo message="* Executing ${path::get-file-name(sql.script)}">
<sql connstring="${sql.connectionString}" delimiter="GO" delimstyle="Line" batch="false" source="${sql.script}">
</do>
</foreach>
</target>
</project>