在.NET应用程序中管理数据库访问密码?

时间:2019-02-22 15:42:15

标签: c# .net oracle visual-studio passwords

因此,我一直负责对Visual Studio中内置的.NET应用程序进行现代化升级,该应用程序可用作我组织的收据匹配工具。最突出的问题之一是,它将非产品和产品数据库访问的密码存储在app.config文件中,未加密,并且部分源代码存储在TFS中。连接字符串类似于以下内容:

 <!-- DEV -->
<add name="DEV_USER" connectionString="data source=DEVDB;user id=DEV_USER;password=*Password*;" providerName="System.Data.OracleClient"/>

    

关于如何在应用程序外部管理这些内容同时仍在其中使用的任何建议?我对.NET应用程序也很陌生,因此任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果您不想存储任何密码,可以在运行时填充它们:

 <add name="DEV_USER" connectionString=" ..SNIP.. password={0};" ..SNIP.. />

然后使用string.Format(devConnectionString, realPassword)

答案 1 :(得分:0)

您可以使用外部文件来保存连接字符串 例如:

Databases.xml

具有这样的加密内容:

<?xml version="1.0" encoding="utf-8" ?>
<DATABASES>  
    <DataBase ConnStr="CKS27/1dfdsUJd3eKfdjvwxGUFGMtFKOWVv1FgffhGQ1uZGWk/PuPCogfOvWsYhdMWKQSfdtxg==">DBName</DataBase>  
    </DATABASES>

并在代码开始执行时使用它们。在该外部文件中,您可以加密方式保存这些连接字符串,并在需要时对其进行解密。 Linq,EF和SqlConnection都支持通过代码设置ConnectionString。

例如:

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;
                }
            }