在Windows服务

时间:2015-07-30 19:44:45

标签: c# mysql windows-services connection-string

我在Visual Studio 2015中使用C#。我编写了一个Windows窗体应用程序,它创建一个对象并将其序列化。该对象包含可用于构造MySQL select命令的信息。所有这些都很有效。

现在我正在编写一个Windows服务来使用这些对象来监视MySQL数据库。我已经能够在我的计算机上安装并运行Windows服务,所以我知道它工作正常。

我可以使用Windows服务连接到MySQL,以便它可以监视数据库。现在,我在OnStart方法中使用此代码:

try{
    string connectionString = @"server=my_server;database=my_database;userid=my_username;password=my_password;";
    MySqlConnection conn = new MySqlConnection(connectionString);
    conn.Open()
catch(Exception ex)
{
    //Log error
}

问题是该程序将用于多个数据库,因此连接字符串中的密码需要更改。我可以轻松地将连接字符串保存到序列化对象,但我不知道正确的方法是安全地获取密码。是否有一种不同的,更好的方法从Windows服务连接到MySQL?我是Windows服务的新手,所以如果我遗漏了一些简单的话,我很抱歉。

[编辑]

我考虑过的一件事是从Windows窗体应用程序向Windows服务发送SecureString(这是我不知道该怎么做),然后在Windows服务中使用它来连接。我能用这种方法看到的唯一问题是,如果服务关闭,那么这些密码就会丢失,需要重新输入。

1 个答案:

答案 0 :(得分:1)

您可以在app.config中加密连接字符串。看看这个:https://msdn.microsoft.com/en-us/library/ms254494(v=vs.110).aspx

但是这样你就无法手动编辑配置,如下所示:

<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
  <EncryptedData>
    <CipherData>
      <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
    </CipherData>
  </EncryptedData>
</connectionStrings>