Как искать в базе данных в Visual Studio? (С#)

Я работаю над побочным проектом (студент, а не домашняя работа, просто праздничное любопытство), который будет моим простым личным менеджером/хранилищем паролей. Это будет приложение для Windows. Я хочу, чтобы он поддерживал более одного пользователя. Теперь, когда у меня есть экран входа в систему и другие функции, я изо всех сил пытаюсь найти простой и эффективный способ проверить правильность входа и пароля пользователя. Я храню информацию в простой таблице SQL под названием «Пользователи» (рисунок ниже). Теперь я хочу получить результат bool, есть ли эти две строки (имя пользователя, пароль) в базе данных. я буду включать код и скриншоты ниже. Любая помощь приветствуется!

PS: я хорошо знаком с mySQL (Oracle), я просто не могу найти хороший способ сделать это, не будучи смешным. :)

namespace KeyLocker.Database {
[Serializable]
public class UserDatabase {
    public void AddUser(string username,string password,string question,string answer) {
        using(var db = new KeyLockerContext()) {
            db.Add(new User { Username = username,Password = password,SecurityQuestion = question,SecurityAnswer = answer });
            db.SaveChanges();
        }
    }

    public bool CheckUser(string username,string password) {
        using(var db = new KeyLockerContext()) {
            /*here i need to find out if username is present in database
              and if it is, i need to find out if the password is correct*/
        }
    }
}

}

Скриншот пользователей таблицы

Сведения о таблице SQL

Обязательный комментарий «Никогда не храните пароли в открытом виде».

itsme86 06.06.2019 22:30

я изменил код на более простой формат, чтобы вопрос было легче понять. но все равно спасибо за наводку :)

Samuel Gregorovič 06.06.2019 22:32

@itsme имеет в виду, что хранение и проверка паролей на самом деле является довольно сложной проблемой, а наивные решения, такие как хранение и сравнение текста, небезопасны и неэффективны. «вопросы безопасности» также являются проблематичным понятием. Здорово, что вы хотите узнать об этом, но, пожалуйста, изучите это правильно, чтобы мы могли уменьшить количество утечек данных, а не увеличить их.

Dour High Arch 06.06.2019 22:33

во-первых, я не собираюсь использовать это в любом случае. Я использую его на изолированном компьютере вне сети с составленной базой данных. Смысл был не в том, чтобы использовать его в реальной жизни, а просто в том, чтобы попытаться получить представление о приложениях для Windows. Я работал над проектами C# раньше (в основном веб-приложения .ASP), но мне интересно узнать о приложениях для Windows. я понимаю срочность и осторожность, которую я должен соблюдать при работе с паролями. Я знаю, что вы имеете в виду это в хорошем смысле! и здорово, что вы принимаете такие меры, чтобы новички не совершали таких ошибок :)

Samuel Gregorovič 06.06.2019 22:38

«Нет такой вещи, как код прототипа» (это вы очень быстро узнаете в индустрии). Всегда делайте все как можно лучше, у вас может не быть возможности все исправить :)

BradleyDotNET 06.06.2019 22:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
5
658
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На первый взгляд кажется, что самый простой код для реализации вашей идеи:

public bool CheckUser(string username,string password) {
    using(var db = new KeyLockerContext()) {

        // Check if that combination already exists in DB.
        var result = db.Users.Where(x => x.Username == username && x.Password == password).SingleOrDefault();

        // See if result has a value, SingleOrDefault() returns null if no match
        return (result == null);
    }
}

РЕДАКТИРОВАТЬ/Отказ от ответственности: Поскольку кажется, что есть некоторая путаница, это идея о том, как быстро проверить, существует ли объект с определенными значениями в БД, а не полная библиотека аутентификации. Вы никогда не должны хранить пароли в открытом виде.

Обязательный комментарий «это означает, что ваши пароли находятся в текстовом виде, не делайте этого».

BradleyDotNET 06.06.2019 22:32

это то, что я искал. я как-то пропустил метод "где". Спасибо за быстрый ответ!

Samuel Gregorovič 06.06.2019 22:34
Пожалуйста, не делай этого, это не только небезопасно, если ваши пользователи когда-либо повторно используют пароль на другом сайте, вы также сливаете этот пароль.
Dour High Arch 06.06.2019 22:36

Обратите внимание, что вам вообще не нужен Where. Вы можете передать предикат SingleOrDefault

BradleyDotNET 06.06.2019 22:47

Спасибо, посмотрю и учту на будущее :)

Samuel Gregorovič 06.06.2019 22:50

Другие вопросы по теме