在客户端控制台应用程序中保存SQL Server连接字符串的位置?

时间:2013-08-26 12:12:49

标签: c# sql sql-server console-application

我正在创建一个Windows控制台应用程序来监控用户的出席情况。 当用户登录到他的计算机(连接到网络)时,应在SQL Server数据库中更新Windows登录时间。

所有客户端计算机都使用网络连接。

问题是我将数据库连接字符串保存到服务器的哪个位置?如果我将连接字符串(加密)保存在客户端应用程序中运行的控制台应用程序中,如果几个月后服务器名称/用户名/密码发生更改,则会产生问题。

请为此问题提供最佳方法。

2 个答案:

答案 0 :(得分:4)

您确实可以将其存储在应用程序配置文件中(有关详细信息,请参阅@ NoOne的answer)。但是,请注意,您可能存储用户名和密码。

您有以下选择:

(a)encrypt connectionStrings配置部分。当你发现YMMV时,这有一些行政“问题”。

(b)不存储用户名和密码,但在运行时从用户查询;可选地允许将它们指定为命令行参数 - 尽管它有自己的问题:使用任务管理器或Process Explorer等进程查看器工具可以看到参数(以及用户名/密码)。

(c)看看您是否可以将连接凭证从用户名/密码更改为集成安全性(因此您不需要在连接字符串中放置用户名/密码,因此不需要在配置文件中。)

选项(c)是最好的。它完全取消了用户名(更重要的是)密码的必要性。但是,您的应用程序(和环境)必须为此做好准备(更多here)。

如果选择选项(b),则可以在配置中指定连接字符串,而不使用UserPassword键。您可以让用户指定它们,然后使用SqlConnectionStringBuilder(或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;

答案 1 :(得分:3)

您应该将app.config文件添加到项目中并将连接字符串存储在其中。

Project-->Add->New Item-->Application Configuration File

将连接字符串添加为

<connectionStrings>
  <add connectionString="test" name="test"/>
</connectionStrings>

将其视为

string connectionString = ConfigurationManager.ConnectionStrings["test"].ConnectionString;

但是密码存储在连接字符串中呢?事实上,您的整个连接字符串应该加密,并考虑到MS也为此提供了内置解决方案。您需要查看Section protection

注意:您必须在项目中添加对System.Configuration的引用