Скрытие пароля для БД
Есть у меня база данных и программа на питоне. Программа подключается к базе данных. Как мне подключится к базе данных с помощью пароля, но чтобы его нигде не было на компьютере?
Ответы (2 шт):
Если Вы хотите полностью обезопасить данные доступа к БД, чтобы пользователь приложения не смог их найти, то тогда у пользователя их не должно быть вообще. В частности, конвертированные в .exe python-приложения вполне себе расконвертируются обратно: раз два три
Решением может стать построение приложения на основе клиент-серверной архитектуры:
- клиентское приложение подключается к серверной части по своим доступам
- серверная часть обрабатывает API-запросы пользователя и обращается к БД уже по своим доступам, которых нет у клиента (организовать их хранение уже на сервере можно по разному)
- серверная часть и БД могут находиться на одной и той же машине, а можно их разнести на разные, чтобы дополнительно ограничить доступ: пример настройки MySQL
Для python поищите материалы по Django/FastAPI/aiohttp или другим фреймворкам для построения клиент-серверного приложения.
С учётом всех уже упомянутых мер ограничения доступа, скрыть пароль (код) доступа можно с помощью цифрового сертификата. Специально сгенерированный сертификат должен быть импортирован в хранилище ЦС ОС (в хранилище пользователя) без возможности экспорта. В приложении будет записан пароль доступа к сертификату.
Таким образом, извлекя пароль из приложения, можно будет получить доступ к данным только с этого компьютера (только от имени конкретного пользователя). (Ещё раз - это не должен быть прямой доступ к БД, а доступ к данным через сервер).
Решение основано на возможностях ОС Microsoft Windows, в других ОС должны быть аналогичные возможности, я думаю.
Это должно сочетаться с мерами ограничения доступа к фаловой системе и функциям ОС на основе учётных записей пользователей, если позволяют условия применения (если позволяют, то это может обеспечить практически 100% защиту).
По ссылке из другого ответа вариант с Credential manager тоже хорош.
Вот эти все советы типа "а что его шифровать, всё равно расшифруют" - полная ерунда. Любое препятствие в доступе к чувствительной информации затруднеят её несанкционированное получение и отсекает часть злоумышленников. Никто из этих советчиков не оставляет свои дома открытыми, хотя открытие большинства замков не представляет никаких трудностей для взломщиков.
Поэтому храните пароль в отдельном файле и скрывайте его тем или иным способом. Один из вариантов, кстати, это стеганография.
В качестве препятствия, например, можно сделать на сервере имитацию беспарольного доступа, чтобы злоумышленник долго мучалался и думал, почему доступ у него есть, а никаких нормальных данных он получить не может. Или обманные учётные данные.