Мне бы хотелось получить отзывы о лучших практиках модели безопасности, которую я придумал для своего приложения. Сначала я погружаюсь с головой в обновление внешнего интерфейса/серверной части Microsoft Access до .NET WinForms/SQL Server с использованием Amazon RDS. Приложение будет многопользовательским, многосайтовым (разные домены) и будет содержать конфиденциальную информацию о состоянии здоровья.
Вот итог двухнедельного исследования:
Зашифрованная строка подключения, хранящаяся в приложении с использованием смешанной аутентификации и SSL. Не идеально, но я думаю, что нашел способ, чтобы все было в порядке, если строка подключения украдена (см. № 5 ниже).
SQL Server принимает соединения только с выбранных IP-адресов (все будут статическими).
Строка подключения к приложению, назначенная одному пользователю SQL Server с правами только на выполнение. Все взаимодействие с БД будет осуществляться с помощью процедур. Разрешения схемы, используемые для ограничения пользователя приложения определенными процедурами.
Таблица пользователей с SHA 256 солеными и хешированными паролями. Это обеспечивает первый уровень безопасности приложений.
ЭТО ЧАСТЬ, В КОТОРОЙ Я НЕ УВЕРЕН: каждая процедура будет полностью выполняться только в том случае, если оператор IF, ищущий имя пользователя и пароль, отправленный как одна из переменных exec = True. UN/PW будет временно храниться для каждого сеанса приложения. Мое объяснение заключается в том, что это не позволяет пользователю со строкой подключения, который каким-то образом входит в систему с разрешенного IP-адреса, получать/изменять какие-либо данные без действительного пароля.
Конфиденциальные столбцы зашифрованы с помощью симметричного ключа AES_256, зашифрованного сертификатом с использованием главного ключа базы данных. Пользователь приложения имеет права на использование симметричного ключа и сертификата.
Пароли пользователей должны соответствовать правилам (длина, сочетание верхнего и нижнего регистра, специальные символы).
Может ли кто-нибудь увидеть какие-либо дыры в этом или есть хорошие альтернативы? Решает ли # 5 дыры в безопасности, присущие строкам подключения, которые есть в приложениях Windows, которые не могут использовать проверку подлинности Windows?