Store the ConnectionString
本文关键字:ConnectionString the Store | 更新日期: 2023-09-27 17:52:54
嗨,我正试图找到最好的方法(或一个很好的)来存储ConnectionString(我的应用程序将连接到服务器中的数据库,它将不断与它一起工作)以及如何处理Admin帐户。默认情况下,所有带有Login的应用程序都必须有一个Admin帐户,对吗?
我认为……
所以,你在机器上安装了一个应用程序,你将如何配置ConnectionString?我认为要求用户配置这样的东西是错误的,如果他们不理解它是什么,或者它真的必须是什么?
想象有一天,由于任何原因,ConnectionString必须更改,如果登录应用程序的Admin帐户凭据在服务器的表中,那么如何登录应用程序来更改ConnectionString?
这是我现在的问题…我不知道这类事情是如何处理的,如果有任何规则来处理它,任何常见的方法,因为我开始更认真地对待这类事情。
注意:我认为这并不重要,但我的应用程序正在WPF中开发。
一个真正简单的方法来做数据库访问安全与MS SQL Server是使用"集成安全= SSPI"。这样,MS SQL服务器就可以根据运行数据库访问进程的Windows用户实体进行身份验证。使用MS SQL Windows身份验证,无需在应用程序中存储任何用户名或密码。
另一种方法是分发一个配置文件,其中包含数据库连接字符串,至少加密密码。
我们在几台服务器上也有很多MySQL数据库,所以MS SQL SSPI不包括我们。
对于服务器端软件,我将数据库连接字符串和凭证存储在一个单独的XML配置文件中,所有服务器端软件都使用该文件。凭据按主题排列,所有数据库信息都经过加密。我为所有服务器进程使用一个通用文件,并开发了一个小加密/DB配置文件管理GUI,因此管理简化,并且使用相同的代码访问所有软件都是通用的。
对于最终用户软件,由于用户维护,使用本地配置文件维护太难了。对于"胖客户端"软件,我在DMZ中的服务器上维护一个单独的数据库,其中包含加密的凭据,任何人都可以普遍访问该软件(没有那么多分布式胖客户端软件)。我们的web应用软件有一个统一的用户数据库,控制所有应用程序的所有用户/角色的访问,所有内容都通过一个系统传送,因此维护用户数据库要容易得多。
坦率地说,多语言系统越来越难以维护。我会使用我们的主域LDAP服务器(Windows ADS),但我们公司的政策将所有域成员服务器完全隔离在我们最信任的VPN之外,因此在很多情况下无法访问。
我希望有一天有时间在我们的DMZ中设置一个基于*nix的LDAP服务器,并在那里集中所有凭据信息。
对于连接到MS SQL服务器的字符串,您基本上有两个选择:
- 在其中存储用户名/密码对。您的应用程序必须能够读取它,因此理论上,应用程序的任何用户都可以这样做(他可以访问您的应用程序,因此他可以反编译它)。实际上,您可以使用存储在源代码或应用程序资源中的密钥加密连接字符串,并且非常确信用户无法读取密码。
- 如果你有一些用户应该能够使用应用程序,你相信他们,和其他用户可能有访问你的应用程序,但不应该能够使用它,你可以使用Windows认证,并设置
Integrated Security=True
在你的连接字符串。这假设您配置了数据库,以便批准的用户可以访问它。
现在,连接字符串可以存储在任何地方,最方便的地方可能是应用程序设置文件。
如果你想确保你的用户只能使用你的应用程序提供的功能,而不能直接访问数据库,你就必须编写一个类似web服务的东西,并通过它间接连接到数据库。
如果您需要将连接字符串存储在配置文件中或您选择的其他地方,您可能希望加密并将加密结果以base 64编码回字符串。查看这里的Encrypt()和Decrypt()实现。
可以在安装应用程序期间操作文件(例如.config文件)。因此,询问用户/管理员(在设置期间)服务器的名称是可以接受的(甚至是用户名和密码,如果您加密这些,但我宁愿使用集成安全性)。
要更新连接字符串,只需创建一个新的安装程序。
可选:将连接字符串存储在活动目录或其他知名存储中,因此您所需要做的就是在一个地方更改值。