C#MySQL动态更改凭据或注销

时间:2020-03-23 21:43:49

标签: c# mysql database security

我目前正在开发C#WPF应用程序。它仅由少量人员/设备使用。 为了使事情变得容易,我决定直接与MySQL数据库对话。

现在,我希望能够通过单击一个按钮来切换当前的用户/数据库凭据,或者能够实现注销功能。

我目前刚刚尝试过:

    public DBConnect()
    {
        Initialize(null, null);
    }


    private void Initialize(string uid, string password)
    {
        string connectionstring;
        connectionstring = "SERVER=" + server + ";" + "DATABASE=" + database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

        connection = new MySqlConnection(connectionstring);
    }

    public void setCredentials(string uid, string password)
    {
        Initialize(uid, password);
    }

    public void destroyCredentialsAndConnection()
    {
        connection = null;
    }

但是显然在调试时我发现,旧的连接字符串仍然由MySQLConnection类在后台静态缓存。

当前看来我的方法确实有效,但是我实际上担心该实现的安全性以列出一些问题:

  1. 内存转储(密码字符串的使用,这些字符串不能被加密,并且可能在很长一段时间内都无法被垃圾收集器删除)
  2. 内存转储(即使在“注销”之后仍缓存连接字符串的事实)
  3. 嗅探网络流量(数据库和C#应用程序之间的连接是否已加密)?
  4. 对服务器的物理访问(存储在硬盘中的MySQL数据库是否已加密)?

是否有更好(更安全)的方式来切换凭据或完全注销用户?

在进行研究时,我在这里或其他任何地方都没有发现任何类似的尝试。

如果我尝试开发php后端,那么没有很多经验会更安全吗?而且我还能使用我基于MySQL触发器创建的审核表吗?

1 个答案:

答案 0 :(得分:0)

如果我对您的要求是正确的,可以尝试创建一种方法来根据用户输入构建连接字符串,并在每次调用该方法时将用户的凭据注入到连接字符串中。

static SqlConnection Connection()
{
   string UserName = UserNameField.Text;
   string Password = PasswordField.Text;

   SqlConnection Connection = new SqlConection("Server=ServerName,Port;Initial Catalog=Catalog;User Id=" + UserName + ";Password=" + Password + ";");
   return Connection;
}
相关问题