繁体   English   中英

桌面应用程序的连接字符串管理

[英]Connection String management for a desktop application

我在C#/ WPF中创建了一个桌面应用程序,它通过代码中指定的常量连接字符串连接到SQL Server 2008实例,如下所示(用于测试目的):

private string GetConnectionString()
{
    //test
    return "Data Source=[server IP]; Initial Catalog=[database name]; User ID=[user ID]; Password=[smart password];";
}

该应用程序将由各种用户使用,并将通过ClickOnce,.zip存档或自定义安装程序进行部署。 它还通过请求应用程序访问用户名和密码来分离自定义登录功能。

存储桌面应用程序(IP,数据库,SQL Server用户,密码)的连接字符串详细信息的最佳做法是什么? 如果连接字符串在夜间更改,这是更新它的最佳方法,而不强制用户更新到我的应用程序的最新版本? 用户不应该能够看到/拦截/反编译连接字符串,所以我想我必须使用某种加密。 我对你的询问有什么建议吗?

即使您将连接字符串编译到应用程序中,仍然可以使用Ildasm.exe (MSIL反汇编程序)工具查看它们,因为字符串是程序集元数据的一部分。

也许这个问题可以帮到你。

在桌面应用程序中,您无法阻止确定的用户查看连接字符串。 即使您使用加密,确定的用户也可以找到并使用加密密钥。

如果客户端连接到数据库,则可以攻击连接。

这是App.Config中的连接数据示例

    <appSettings>
        <add key="dbServer" value="svr"/>
        <add key="dbDataBase" value="db1"/>
        <add key="dbUser" value="sharedUser"/>
        <add key="dbPassword" value="easyPassword"/>
     </appSettings>

需要参考system.configuration

        string SvrName = ConfigurationManager.AppSettings["dbServer"];
        string DBName = ConfigurationManager.AppSettings["dbDataBase"];
        string DBUser = ConfigurationManager.AppSettings["dbUser"];
        string DBPassword = ConfigurationManager.AppSettings["dbPassword"];

至于安全性,答案是2层应用程序,其中只有安全服务器端代码连接到数据库。 此代码示例来自服务器端代码。

服务器端的其他好处是来自同一连接的重复查询可以从先前查询的内存中获得索引。

您可以对从AppSettings读取的密码进行加盐和散列并对应用程序进行模糊处理,但是您必须使用静态盐才能被黑客攻击。 这只会减慢黑客的速度。

您需要在应用程序中添加“应用程序设置”文件。 只需右键单击您的解决方案 - >添加 - >找到类似于“应用程序配置”的内容。 为此,您需要某种外部配置文件来存储连接字符串。 你甚至可以使用一个简单的文件。 如果担心人们找到该文件,您可以随时加密该字符串并在您的应用程序中解密它。

我的观点是,最安全的解决方案是将当前的DNS入口指向当前的SQL计算机,并将身份验证作为Windows身份验证

例如:SQLMACHINE主机名在DNS服务器中指向192.168.1.3。

这样,如果SQL机器的名称/ IP发生更改,则只需更新DNS服务器(并且可能使本地DNS缓存无效)。

拥有Windows身份验证意味着本地计算机上不会存储密码,因此您可以安全地将连接字符串存储在.config文件中,而无需担心。

我2(欧元)美分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM