存储连接字符串
Posted
技术标签:
【中文标题】存储连接字符串【英文标题】:Store the ConnectionString 【发布时间】:2011-08-11 16:59:48 【问题描述】:您好,我正在尝试找到存储 ConnectionString 的最佳方式(或一种好的方式)(我的应用程序将连接到服务器中的数据库,它将持续使用它)以及如何使用管理员帐户进行处理。默认情况下,所有登录的应用程序都必须有一个管理员帐户,对吧?
我是这么想的……
那么,你在机器上安装了一个应用程序,你将如何配置 ConnectionString?我认为如果不了解它是什么或者它真的必须是什么,那么要求用户配置这样的东西是错误的?
想象有一天,由于任何原因必须更改 ConnectionString,如果登录应用程序的管理员帐户凭据在服务器的表中,那么如何登录应用程序来更改 ConnectionString ?
这是我现在的问题......我不知道如何处理这种类型的事情,是否有任何规则来处理这个,任何常见的方式,因为我开始更认真地处理这种类型的事情。
注意:我认为这并不重要,但我的应用程序正在 WPF 中开发。
【问题讨论】:
你在说什么?你在连接什么? 我忘了提...将使用该应用程序的机器... 你想连接什么数据库,mysql。 MS SQL 服务器? 这是在 Intranet 中吗?您愿意在多大程度上信任您的用户? 是的。安全性不一定是最严格的,但它总是需要的。 【参考方案1】:使用 MS SQL Server 进行数据库访问安全性的一种非常简单的方法是使用“Integrated Security = SSPI”。这样,MS SQL 服务器对运行数据库访问进程的 Windows 用户实体进行身份验证。这一切都使用 MS SQL Windows 身份验证无缝进行,无需在应用程序中存储任何用户名或密码。
另一种方法是分发一个配置文件,其中包含数据库连接字符串,至少密码加密。
我们在多台服务器上也有很多 MySQL 数据库,所以 MS SQL SSPI 不包括我们。
对于服务器端软件,我将数据库连接字符串和凭据存储在所有服务器端软件都使用的单独 XML 配置文件中。凭据按主题排列,所有数据库信息均已加密。我为所有服务器进程使用一个通用文件,并开发了一个小的加密/数据库配置文件管理 GUI,以便简化管理,并且使用相同代码的所有软件都可以访问。
对于最终用户软件,由于用户维护,很难使用本地配置文件进行维护。对于“胖客户端”软件,我在我们的 DMZ 中的服务器上维护一个带有加密凭据的单独数据库,任何拥有该软件的人都可以普遍访问(没有那么多分布式胖客户端软件。)我们的网络应用程序软件有一个统一的用户数据库它控制所有应用程序的所有用户/角色的访问权限,并且所有内容都通过一个系统进行门户,因此维护用户数据库要容易得多。
坦率地说,多语言系统越来越难维护。我会使用我们的主域 LDAP 服务器 (Windows ADS),但我们的公司政策将所有域成员服务器完全隔离,无法访问我们最信任的 *** 之外的访问,因此在太多情况下无法访问。
我希望有一天有时间在我们的 DMZ 中设置一个基于 *nix 的 LDAP 服务器,并将所有凭据信息集中在那里。
【讨论】:
我知道集成安全性,但我必须将这两个选项保留在 Open 中,通过 SQL 上的身份验证和通过 Windows 身份验证。但我必须存储其他信息。一方面,我将使用邮件服务器,它只能用于电子邮件的一个域,它是他们自己的。我将不得不让他们进行配置。那么在哪里存储这些配置的好方法呢? @Miguel:我在上面的答案中添加了 - 评论太长了。【参考方案2】:使用 MS SQL 服务器的连接字符串,您基本上有两种选择:
-
要么在其中存储用户名/密码对。您的应用程序必须能够读取它,因此理论上,该应用程序的任何用户都可以这样做(他可以访问您的应用程序,因此他可以反编译它)。实际上,您可以使用存储在源代码或应用程序资源中的密钥来加密连接字符串,并确信您的用户将无法读取密码。
如果您有一些用户应该能够使用该应用程序并且您相信他们,以及其他可能有权访问您的应用程序但不应该使用它的用户,您可以使用 Windows 身份验证,并设置
Integrated Security=True
在您的连接字符串中。这假设您配置了数据库,以便获得批准的用户可以访问它。
无论哪种方式,您的连接字符串都应该与应用程序的其余部分捆绑在一起。如果您需要更改它,只需发布一个新版本。 (这甚至适用于最原始的安装版本:“将这堆文件复制到您计算机上的目录中”)。
现在,连接字符串几乎可以存储在任何地方,最方便的地方可能是application settings file。
如果您想确定您的用户将只能使用您的应用程序提供的功能而不是直接访问数据库,您必须编写类似 Web 服务的内容,并且只能通过以下方式间接连接到数据库那个。
【讨论】:
【参考方案3】:如果您需要将连接字符串存储在配置文件或您选择的其他位置,您可能需要加密并将加密的结果进行 base 64 编码回字符串。检查 here 以获取 Encrypt() 和 Decrypt() 实现。
【讨论】:
【参考方案4】:可以在安装应用程序期间操作文件(例如 .config 文件)。因此,可以向用户/管理员(在设置过程中)询问服务器的名称(甚至询问用户名和密码,前提是您对这些进行了加密,但我宁愿使用集成安全性)。
要更新连接字符串,只需制作一个新的安装程序。
替代方案:将连接字符串存储在活动目录或其他知名存储中,因此您只需在一处更改值即可。
【讨论】:
以上是关于存储连接字符串的主要内容,如果未能解决你的问题,请参考以下文章