我正在创建一个 Windows 控制台应用程序来监控用户的出席情况。当用户登录到他的计算机(连接到网络)时,Windows 登录时间应该在 SQL Server 数据库中更新。
所有客户端计算机都使用网络连接。
问题是我将在哪里将数据库连接字符串保存到服务器?如果我将连接字符串(加密)保存在客户端应用程序中运行的控制台应用程序中,如果几个月后服务器名称/用户名/密码发生更改,则会产生问题。
请建议解决此问题的最佳方法。
我正在创建一个 Windows 控制台应用程序来监控用户的出席情况。当用户登录到他的计算机(连接到网络)时,Windows 登录时间应该在 SQL Server 数据库中更新。
所有客户端计算机都使用网络连接。
问题是我将在哪里将数据库连接字符串保存到服务器?如果我将连接字符串(加密)保存在客户端应用程序中运行的控制台应用程序中,如果几个月后服务器名称/用户名/密码发生更改,则会产生问题。
请建议解决此问题的最佳方法。
您确实可以将其存储在应用程序配置文件中(有关更多详细信息,请参阅@NoOne 的答案)。但是,请注意,您可能不应该将用户名和密码存储在那里。
您有以下选择:
(a)加密配置connectionStrings
部分。当您发现 YMMV 时,这有一些管理“问题”。
(b) 不存储用户名和密码,而是在运行时向用户查询;可选地允许将它们指定为命令行参数 - 尽管这有其自身的问题:使用任务管理器或进程资源管理器等进程查看器工具可以看到参数(以及因此用户名/密码)。
(c) 查看您是否可以将连接凭据从用户名/密码更改为集成安全性(因此您不需要将用户名/密码放在连接字符串中,因此不需要放在配置文件中)。
选项(c)是最好的。它完全消除了用户名(更重要的是)密码的必要性。但是,您的应用程序(和环境)必须为此做好准备(更多信息在此处)。
如果您选择选项 (b),则可以在配置中指定连接字符串,而无需使用User
andPassword
键。您可以让用户指定它们,然后通过使用SqlConnectionStringBuilder
(or DbConnectionStringBuilder
) 类构建一个真正的连接字符串以供进一步使用:
var builder = new SqlConnectionStringBuilder(
ConnectionManager.ConnectionStrings["test"].ConnectionString);
builder.UserID = /* Username specified by user */
builder.Password = /* Password specified by user */
string realConnectionString = builder.ConnectionString;
您应该将 app.config 文件添加到您的项目中并将连接字符串存储在其中。
Project-->Add->New Item-->Application Configuration File
添加连接字符串为
<connectionStrings>
<add connectionString="test" name="test"/>
</connectionStrings>
读为
string connectionString = ConfigurationManager.ConnectionStrings["test"].ConnectionString;
但是存储在连接字符串中的密码呢?事实上,你的整个连接字符串应该被加密,并且考虑到 MS 也为此提供了一个内置的解决方案。您需要查看此部分保护。
注意:您必须System.Configuration
在项目中添加对