存储ConnectionString

时间:2011-04-24 01:54:25

标签: c# sql sql-server wpf connection-string

您好我正在尝试找到存储ConnectionString的最佳方式(或一个好方法)(我的应用程序将连接到服务器中的数据库,它将继续使用它)以及如何使用管理员帐户进行处理。默认情况下,所有登录的应用程序都必须有管理员帐户,对吧?

我想那样......

那么,你在机器上安装一个应用程序,你将如何配置ConnectionString?我认为如果不理解它是什么或者它真的必须要求用户配置这样的东西是错误的?

想象有一天,由于任何原因必须更改ConnectionString,如果登录应用程序的Admin acoount凭据位于服务器的表中,那么如何登录应用程序以更改ConnectionString ?

现在这是我的问题......我不知道如何处理这类事情,如果有任何规则来处理这个问题,任何常见的方式,因为我开始更认真地对待这类事情。

注意:我认为这并不重要,但我的应用程序是在WPF中开发的。

4 个答案:

答案 0 :(得分:4)

使用MS SQL Server进行数据库访问安全性的一种非常简单的方法是使用“Integrated Security = SSPI”。这样,MS SQL服务器就运行数据库访问进程的Windows用户实体进行身份验证。这一切都在无需使用MS SQL Windows身份验证,无需在应用程序中存储任何用户名或密码。

另一种方法是分发一个配置文件,其中包含数据库连接字符串,至少加密了密码。

我们在几台服务器上也有很多MySQL数据库,因此MS SQL SSPI不会覆盖我们。

对于服务器端软件,我将数据库连接字符串和凭证存储在所有服务器端软件使用的单独XML配置文件中。凭证是局部排列的,所有数据库信息都是加密的。我为所有服务器进程使用了​​一个通用文件,并开发了一个小的加密/数据库配置文件管理GUI,因此简化了管理,并且使用相同的代码对所有软件都是通用的。

对于最终用户软件,由于用户维护,使用本地配置文件进行维护非常困难。对于“胖客户端”软件,我在我们的DMZ中的服务器上维护一个带有加密凭据的单独数据库,任何人都可以使用该软件(没有那么多分布式胖客户端软件)。我们的Web应用程序软件具有统一的用户数据库。它控制所有应用程序的所有用户/角色的访问权限,并且所有内容都通过一个系统进行移植,因此可以更容易地保留用户数据库。

坦率地说,多语言系统越来越难以维护。我会使用我们的主域LDAP服务器(Windows ADS),但是我们的公司策略会使所有域成员服务器完全防火,从我们最信任的VPN外部访问,因此在很多情况下无法访问。

我希望有一天能够有时间在我们的DMZ中设置基于* nix的LDAP服务器并集中所有凭证信息。

答案 1 :(得分:2)

使用连接到MS SQL服务器的字符串,您基本上有两个选项:

  1. 在其中存储用户名/密码对。您的应用程序必须能够读取它,因此理论上,应用程序的任何用户都可以执行相同的操作(他可以访问您的应用程序,因此他可以对其进行反编译)。实际上,您可以使用存储在源代码或应用程序资源中的密钥加密连接字符串,并确信您的用户将无法读取密码。
  2. 如果您的某些用户应该能够使用该应用程序并且您相信它们,以及可能有权访问您的应用程序但无法使用它的其他用户,则可以使用Windows身份验证并设置您的连接字符串中的Integrated Security=True。这假设您配置了数据库,以便批准的用户可以访问它。
  3. 无论哪种方式,您的连接字符串都应与应用程序的其余部分捆绑在一起。如果您需要更改它,您只需发布一个新版本。 (这适用于最原始的安装版本:“将这一堆文件复制到计算机上的目录中”。)

    现在,连接字符串几乎可以存储在任何地方,最方便的地方可能是application settings file

    如果您希望确定您的用户只能使用应用程序提供的功能而不直接访问数据库,则必须编写类似Web服务的内容并仅通过间接连接到数据库这一点。

答案 2 :(得分:2)

如果您需要将连接字符串存储在配置文件或您选择的其他位置,则可能需要对加密结果进行加密和编码,然后将其编码回字符串。检查here是否有Encrypt()和Decrypt()实现。

答案 3 :(得分:0)

可以在安装应用程序期间操作文件(例如.config文件)。因此,可以向用户/管理员(在安装期间)询问服务器的名称(即使是用户名和密码,只要你加密这些,但我宁愿使用集成安全性)。

要更新连接字符串,只需创建一个新的安装程序。

替代方法:将连接字符串存储在活动目录或其他知名商店中,这样您只需在一个位置更改值即可。