C# MySQL Изменение учетных данных или выход из системы на лету - PullRequest
0 голосов
/ 24 марта 2020

Я сейчас занимаюсь разработкой C# WPF-приложения. Он используется только небольшим количеством людей / устройств. Чтобы упростить задачу, я решил поговорить напрямую с MySQL db.

Теперь я хотел иметь возможность переключать текущие учетные данные пользователя / db одним нажатием кнопки или иметь возможность осуществлять выход из системы. feature.

Я только что попробовал это:

    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. сеть traffi c сниффинг (зашифровано ли соединение между базой данных и моим C# приложением)?
  4. физический доступ к серверу ver (база данных MySQL хранится в зашифрованном виде на жестком диске)?

Есть ли лучший (более безопасный) способ переключения учетных данных или полного выхода пользователя из системы?

Я действительно не нашел подобных попыток здесь или где-либо еще во время исследования.

И если бы я попытался разработать бэкэнд php, было бы безопаснее без большого опыта? И могу ли я по-прежнему использовать свои таблицы аудита, созданные на основе MySQL Триггеров?

1 Ответ

0 голосов
/ 24 марта 2020

Если я правильно понимаю, что вы спрашиваете правильно, вы можете попробовать создать метод для построения строки подключения на основе пользовательского ввода и вставлять учетные данные пользователя в строку подключения при каждом вызове метода.

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...