Здравствуйте! Есть необходимость входа в программу по логин и паролю. Слышал, что отдельная таблица не подходит с целью улучшения безопасности. Как это можно осуществить?
Стандартная трёх уровневая архитектура.
Программа клиент.
Бизнес логика и код на сервере, предоставляющая (Web API, Rest, WebService) для доступа программе.
База данных на сервере.
Схема работы такая:
По умолчанию программа может только вызывать функцию bool TryLogin(string username, string password) если пользователь залогинелся то в сессии, либо более современный способ в JWT токене хранится информация о пользователе, из которой можно получить его права.
Дале для каждой операции сначала идёт проверка прав, есть ли у данного пользователя права для выполнения данной операции. Если прав нету то выдаётся ошибка.
Таким образом к базе данных имеет доступ только тот пользователь, который авторизован для данной операции, кроме того доступ идёт не к самой базе данных а к API который предоставляет сервис (2-ой уровень).
То есть права на конкретные операции определяются пользователем который сейчас залогинен.
Пользователь никак не может получить таблицу с паролями, так как 1. Этого не позволяет API системы. 2. Любые операции делаются под конкретным пользователем с конкретными правами.
Кроме того пароли на сервере обычно хранят в зашифрованном виде, на случай если кто-то всё-таки умудрился получить доступ к базе, например через exploit или нечестный админ на сервере.
В ручнею нету необходимости всё это создавать с нуля, для этого есть много разных готовых библиотек. В случае с C# есть например Identity.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей