protected void OnButtonOkClicked(object sender, EventArgs e) { NewPassword = entryPassword.Text; if (WorkMode == Mode.Manual) { return; } if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword)) { logger.Error("Ошибка установки пароля!"); return; } logger.Info("Пароль изменен."); } else { logger.Info("Отправляем новый пароль на сервер..."); string sql; sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; try { QSMain.CheckConnectionAlive(); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = sql; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
protected void OnButtonOkClicked(object sender, EventArgs e) { NewPassword = entryPassword.Text; if (WorkMode == Mode.Manual) { return; } if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (svc == null || !svc.changeUserPasswordBySessionId(Session.SessionId, NewPassword)) { logger.Error("Ошибка установки пароля!"); return; } logger.Info("Пароль изменен."); } else { logger.Info("Отправляем новый пароль на сервер..."); string sql; try { var reg = new Regex("password=(.+?)(;|$)"); QSMain.CheckConnectionAlive(); DbCommand cmd = QSMain.ConnectionDB.CreateCommand(); cmd.CommandText = "SELECT version();"; var version = (string)cmd.ExecuteScalar(); logger.Debug("Server version: " + version); if (version.EndsWith("-MariaDB")) { sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; } else if (Version.Parse(version) >= new Version(8, 0, 13)) { var match = reg.Match(QSMain.ConnectionString); string oldPassword = match.Success ? match.Groups[1].Value : null; sql = $"SET PASSWORD='******' REPLACE '{oldPassword}';"; } else { sql = "SET PASSWORD = PASSWORD('" + entryPassword.Text + "')"; } cmd.CommandText = sql; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); //Заменяем пароль с текущей строке одключения, для того чтобы при переподключении не было ошибок //и чтобы при смене пароля еще раз был текущий пароль. QSMain.ConnectionString = reg.Replace(QSMain.ConnectionString, $"password={entryPassword.Text};"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }