void ChangePassword() { logger.Info("Отправляем новый пароль на сервер..."); if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { logger.Error("Ошибка установки пароля!"); } else { logger.Info("Пароль изменен. Ok"); } } else { string sql; try { QSMain.CheckConnectionAlive(); sql = "SET PASSWORD FOR @login = PASSWORD(@password)"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)"; cmd.ExecuteNonQuery(); logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
void ChangePassword() { logger.Info("Отправляем новый пароль на сервер..."); if (Session.IsSaasConnection) { ISaaSService svc = Session.GetSaaSService(); if (!svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { logger.Error("Ошибка установки пароля!"); } else { logger.Info("Пароль изменен. Ok"); } } else { string sql; try { QSMain.CheckConnectionAlive(); sql = "SELECT version();"; MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); var version = (string)cmd.ExecuteScalar(); logger.Debug("Server version: " + version); if (!version.EndsWith("-MariaDB") && Version.Parse(version) >= new Version(8, 0, 13)) { cmd.CommandText = "ALTER USER @login IDENTIFIED BY @password;"; cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); } else { cmd.CommandText = "SET PASSWORD FOR @login = PASSWORD(@password)"; cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@password", entryPassword.Text); cmd.ExecuteNonQuery(); cmd.CommandText = "SET PASSWORD FOR @login @'localhost' = PASSWORD(@password)"; cmd.ExecuteNonQuery(); } logger.Info("Пароль изменен. Ok"); } catch (Exception ex) { logger.Error(ex, "Ошибка установки пароля!"); QSMain.ErrorMessage(this, ex); } } }
protected void OnButtonOkClicked(object sender, EventArgs e) { string sql; ISaaSService svc = null; if (entryLogin.Text == "root") { string Message = "Операции с пользователем root запрещены."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return; } if (Session.IsSaasConnection) { int dlgRes; svc = Session.GetSaaSService(); if (NewUser) { //Проверка существует ли логин sql = "SELECT COUNT(*) FROM users WHERE login = @login"; QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@login", entryLogin.Text); if (Convert.ToInt32(cmd.ExecuteScalar()) > 0) { string Message = "Пользователь с логином " + entryLogin.Text + " уже существует в базе. " + "Создание второго пользователя с таким же логином невозможно."; MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, Message); md.Run(); md.Destroy(); return; } //Регистрируем пользователя в SaaS Result result = svc.registerUserV3(entryLogin.Text, entryPassword.Text, Session.SessionId, entryName.Text, entryEmail.Text); if (!result.Success) { if (result.Error == ErrorType.UserExists) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, "Пользователь с таким логином уже существует. Предоставить ему доступ к базе?\n" + "ВНИМАНИЕ: Если вы указали новый пароль для пользователя, то он применен не будет."); dlgRes = md.Run(); md.Destroy(); if ((ResponseType)dlgRes == ResponseType.No) { return; } } else { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, result.Description); md.Run(); md.Destroy(); return; } } //Создаем запись в Users. sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " + "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")"; } else { if (entryPassword.Text != passFill) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.YesNo, "Изменение пароля произойдет во всех базах, к которым пользователь имеет доступ.\nПродолжить?"); dlgRes = md.Run(); md.Destroy(); if ((ResponseType)dlgRes == ResponseType.Yes && !svc.changeUserPasswordByLogin(entryLogin.Text, Session.Account, entryPassword.Text)) { MessageDialog md1 = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, "Ошибка изменения пароля пользователя."); md1.Run(); md1.Destroy(); return; } else if ((ResponseType)dlgRes != ResponseType.Yes) { return; } } sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, " + QSMain.AdminFieldName + " = @admin," + "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id"; } } else { if (NewUser) { if (!CreateLogin()) { return; } sql = "INSERT INTO users (name, login, deactivated, email, " + QSMain.AdminFieldName + ", description" + QSMain.GetPermissionFieldsForSelect() + GetExtraFieldsForSelect() + ") " + "VALUES (@name, @login, @deactivated, @email, @admin, @description" + QSMain.GetPermissionFieldsForInsert() + GetExtraFieldsForInsert() + ")"; } else { if (OriginLogin != entryLogin.Text && !RenameLogin()) { return; } if (entryPassword.Text != passFill) { ChangePassword(); } sql = "UPDATE users SET name = @name, deactivated = @deactivated, email = @email, login = @login, " + QSMain.AdminFieldName + " = @admin," + "description = @description " + QSMain.GetPermissionFieldsForUpdate() + GetExtraFieldsForUpdate() + " WHERE id = @id"; } UpdatePrivileges(); logger.Info("Запись пользователя..."); } try { QSMain.CheckConnectionAlive(); MySqlCommand cmd = new MySqlCommand(sql, QSMain.connectionDB); cmd.Parameters.AddWithValue("@id", entryID.Text); cmd.Parameters.AddWithValue("@name", entryName.Text); cmd.Parameters.AddWithValue("@login", entryLogin.Text); cmd.Parameters.AddWithValue("@admin", checkAdmin.Active); cmd.Parameters.AddWithValue("@deactivated", checkDeactivated.Active); cmd.Parameters.AddWithValue("@email", entryEmail.Text); foreach (KeyValuePair <string, CheckButton> Pair in RightCheckButtons) { cmd.Parameters.AddWithValue("@" + QSMain.ProjectPermission[Pair.Key].DataBaseName, Pair.Value.Active); } if (permissionViews != null) { foreach (var view in permissionViews) { cmd.Parameters.AddWithValue(view.DBFieldName, view.DBFieldValue); } } if (textviewComments.Buffer.Text == "") { cmd.Parameters.AddWithValue("@description", DBNull.Value); } else { cmd.Parameters.AddWithValue("@description", textviewComments.Buffer.Text); } cmd.ExecuteNonQuery(); if (QSMain.User.Login == entryLogin.Text) { QSMain.User.LoadUserInfo(); } logger.Info("Ok"); Respond(ResponseType.Ok); } catch (Exception ex) { logger.Error(ex, "Ошибка записи пользователя!"); QSMain.ErrorMessage(this, ex); } //Предоставляем пользователю доступ к базе if (Session.IsSaasConnection) { if (!svc.changeBaseAccessFromProgram(Session.SessionId, entryLogin.Text, Session.SaasBaseName, !checkDeactivated.Active, checkAdmin.Active)) { MessageDialog md = new MessageDialog(this, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Close, "Ошибка предоставления доступа к базе данных."); md.Run(); md.Destroy(); return; } } }