这个问题在这里已有答案:
因此,我的任务是使用Visual Studio构建的.NET应用程序进行现代化,该应用程序可用作我组织的收据匹配工具。其中一个最突出的问题是它在app.config文件中存储非prod和prod数据库访问的密码,未加密并且存储在TFS中的部分源代码。连接字符串看起来类似于:
<!-- DEV -->
<add name="DEV_USER" connectionString="data source=DEVDB;user id=DEV_USER;password=*Password*;" providerName="System.Data.OracleClient"/>
有关如何在应用程序之外管理这些内容同时仍然在其中使用它们的任何建议?我也是.NET应用程序的新手,所以非常感谢任何建议。
如果您不想存储任何密码,可以在运行时填充它们:
<add name="DEV_USER" connectionString=" ..SNIP.. password={0};" ..SNIP.. />
然后使用string.Format(devConnectionString, realPassword)
您可以使用外部文件来保存连接字符串,例如:
Databases.xml
加密内容如下:
<?xml version="1.0" encoding="utf-8" ?>
<DATABASES>
<DataBase ConnStr="CKS27/1dfdsUJd3eKfdjvwxGUFGMtFKOWVv1FgffhGQ1uZGWk/PuPCogfOvWsYhdMWKQSfdtxg==">DBName</DataBase>
</DATABASES>
并在代码开始执行时使用它们。在该外部文件中,您可以以加密方式保存这些连接字符串,并在需要时对其进行解密。 Linq,EF和SqlConnection都支持从代码设置ConnectionStrings。
例如:
doc = new XmlDocument();
string fullFileName = System.Environment.CurrentDirectory + @"\" + "Databases.xml";
doc.Load(fullFileName);
foreach (XmlNode node in doc.DocumentElement.ChildNodes)
{
if (node.InnerText == DBName)
{
string currConnStr = Decrypt(node.Attributes["ConnStr"].Value);
return currConnStr;
}
}