1 / 1 / 0
Регистрация: 28.03.2023
Сообщений: 52

Как безопасно хранить пароль от базы данных?

29.03.2023, 20:43. Показов 4198. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть у меня приложение в виде формы авторизации/регистрации, которая интегрирована с базой данных.
Чтобы проверить строку в БД или записать новую (etc) - нужно осуществить процедуру подключения к базе данных, только теперь вопрос - где хранить конфиг от бд MySQL (7 строчка кода)?

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using MySql.Data.MySqlClient;
 
namespace AuthForm
{
    class DataBase
    {
        MySqlConnection connection = new MySqlConnection("server=localhost;port=3306;username=root;password=root;database=AuthDataMyClient"); 
 
// Пояснение для форумчан...root/root не смейтесь, это просто дефолтная бд локального сервера, поменять пароль и логин 
от нее не могу, тк запускал со стороннего клиента - MAMP.
 
        public void OpeningConnection() // Открытие соеденения
        {
            if (connection.State == System.Data.ConnectionState.Closed)
                connection.Open();
        }
 
        public void ClosingConnection() // Закрытие соеденения
        {
            if (connection.State == System.Data.ConnectionState.Open)
                connection.Close();
        }
 
        public MySqlConnection GetСonnectionStatus() // Получаем статус соединения
        {
            return connection;
        }
    }
}
Говнокод буду переделывать со временем получения должного опыта. Опираясь на Ваш опыт, старожилы форума - хотелось бы услышать подсказку или ответ как.
Неважная лирика: пароли в базу я передаю в хешированом виде, sha512, соль пока не интегрировал
Я думаю, что можно как-то хранить в app.config, сделал так
XML
1
2
3
4
5
6
<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="MyConnectionString" connectionString="server=localhost;port=3306;username=root;password=root;database=AuthDataMyClient"/>
  </connectionStrings>
</configuration>
Но хмл вроде бы легко читаем, может быть не так надо
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.03.2023, 20:43
Ответы с готовыми решениями:

Есть ли способ безопасно сохранить пароль в программе? То есть вшить в прогу пароль от локальной базы данных например.
Замутил класс, буду наполнять его полезными методами. Возможно создам ещё один другой класс, не расширение. public static class...

Как безопасно хранить данные для подключения к базе данных?
У меня есть только одна мысль как не хранить настройки подключения на компе пользователя, которых будет много. А именно: пользователь...

Как хранить и извлекать изображение из базы данных
Привет всем, такая вот проблема , делаю программу для просмотра лекции , лекция у меня состоят из текста и какого либо изображения , для...

18
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,726
Записей в блоге: 1
29.03.2023, 21:10
По большому счёту в .Net коде вообще ничего спрятать нельзя, т.к. декомпиляторы хорошо развиты и позволяют даже обфусцированный код делать читаемым, но сейчас не об этом. То есть прятать данные и методы их извлечения в коде бессмысленно. Однако для защиты от дурака можно прибегнуть к любому более или менее стойкому методу шифрования. В этом случае строка подключения не будет светится в явном виде, но при этом она остаётся в коде и всё ещё доступна для хакинга. Как один из надёжных вариантов хранения предложу строку подключения, а возможно и другие секретные данные, хранить, например, в запароленном RAR-архиве рядом с программой. Для получения строки подключения необходима авторизация пользователя (пускай даже локальная) и по его (вводимым им) авторизационным данным (они же пароль от архива или некая его часть) извлекайте файл с данными из архива. Таким образом, без ввода данных пользователем извлечение строки подключения становится практически невозможным.
Сложность пароля и время его подбора, а также методы утечки пароля не рассматриваем, т.к. это отдельная и довольно избитая тема.
1
1 / 1 / 0
Регистрация: 28.03.2023
Сообщений: 52
29.03.2023, 22:04  [ТС]
Uswer, спасибо за ваш ответ. По всей видимости будет проблематично это сделать
Читал в документации, что можно конфиг зашифровать встроенной утилитой в студию...
0
Эксперт .NET
 Аватар для Usaga
14111 / 9328 / 1349
Регистрация: 21.01.2016
Сообщений: 35,031
30.03.2023, 04:10
Цитата Сообщение от contempio Посмотреть сообщение
где хранить конфиг от бд MySQL (7 строчка кода)?
Рядом с вашим приложением. По-хорошему, ваше приложение должно иметь клиент-серверную архитектуру. В базу должна ходить серверная часть, она же и будет знать о паролях всяких. На сервере можно не париться сокрытием паролей. На клиенте же никаких паролей быть не должно в таком случае.

Но если у вас клиент напрямую в базу ломится... Тут никакое шифрование не спасёт, ибо на клиенте всё и расшифровать можно как нефиг делать.

Поэтому ответ на ваш вопрос звучит не так как вы ожидали: безопасно хранить пароль на клиенте можно... убрав его с клиента вообще. Т.е. надо архитектуру вашего приложения менять. Или не греть голову, если уже всё через задницу сделано.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
30.03.2023, 08:53
Если вы единственный пользователь своего приложения, и connectionString статический -- зашейте в exe и забейте. Но по фешную конечно подымать сервис (например WebAPI), который и будет "защищать" БД от внешнего проникновения.
0
 Аватар для Andrey-MSK
3317 / 2204 / 387
Регистрация: 14.08.2018
Сообщений: 7,411
Записей в блоге: 4
30.03.2023, 11:34
Цитата Сообщение от contempio Посмотреть сообщение
Code
1
server=localhost;port=3306;username=root;password=root;database=AuthDataMyClient
В App.config
XML
1
2
3
4
<connectionStrings>
    <add name="SQLConnectDebug" 
         connectionString="server=localhost;port=3306;username={0};password={1};database=AuthDataMyClient" />      
</connectionStrings>
И в коде подставляйте туда данные из окна входа в приложение.
0
2282 / 1598 / 400
Регистрация: 26.06.2017
Сообщений: 4,726
Записей в блоге: 1
30.03.2023, 16:14
Andrey-MSK, ну как бы не совсем хорошо, чтобы конечный пользователь знал учётные данные от SQL-сервера. То, что приложение не клиент-серверное безусловно минус. Однако, если предполагается его использование в рамках одной сети предприятия, то почему бы и не использовать сетевые возможности SQL-сервера. А если приглядеться, то можно заметить server=localhost, что вообще говорит о локальном сервере. Тогда встаёт вопрос - от кого ТС прячет учётные данные сервера?
Выше я перегнул палку с архивом, думаю что будет достаточно внедрить в проект методы шифрования/дешифрования учётных данных, где в качестве ключа шифрования будет выступать пароль пользователя (или его хеш). Вот готовый пример такого шифрования.
0
 Аватар для Andrey-MSK
3317 / 2204 / 387
Регистрация: 14.08.2018
Сообщений: 7,411
Записей в блоге: 4
30.03.2023, 17:13
Цитата Сообщение от Uswer Посмотреть сообщение
в рамках одной сети предприятия, то почему бы и не использовать сетевые возможности SQL-сервера
Я так и делаю у себя, у меня стоит аутентификация Windows и все пользователи спокойно подключаются к своим учеткам на сервере, но это про MS SQL Server, а у ТС MySQL... Я не уверен что там такое есть...

Добавлено через 48 минут
Цитата Сообщение от Uswer Посмотреть сообщение
ну как бы не совсем хорошо, чтобы конечный пользователь знал учётные данные от SQL-сервера.
Смотря как настроена работа, если через записи на сервере СУБД, то пользователь их и так знает, так что как вариант. Только одно нужно учесть - данные строки подключения передаются открытым текстом, так что нужно использовать шифрованное соединение с сервером...
0
1 / 1 / 0
Регистрация: 28.03.2023
Сообщений: 52
01.04.2023, 15:24  [ТС]
Однако, если предполагается его использование в рамках одной сети предприятия, то почему бы и не использовать сетевые возможности SQL-сервера. А если приглядеться, то можно заметить server=localhost, что вообще говорит о локальном сервере. Тогда встаёт вопрос - от кого ТС прячет учётные данные сервера?
Вообще это первое мое приложение на формах было. Пробовал еще научиться работать с внешними бд и встал вопрос спустя неделю, что неправильно хранить вот так коннект.
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
01.04.2023, 22:42
contempio, если не секрет, то что за приложение? Просто в зависимости от назначения БД, возможно вам вообще ближе будет какой-нибудь sqlite для портативности. Либо наоборот таки нужно полноценный отдельный сервис.
0
1 / 1 / 0
Регистрация: 28.03.2023
Сообщений: 52
02.04.2023, 18:02  [ТС]
Неко с ушами, ну никакое пока что, планировал как-нибудь интегрировать форму с дальнейшим проектом, но пока не нацелился на какой. Делаю по мелочи, учусь, мелкие формы на 200-300 строк...
Просто попал на канал недо-прогера - Дударя, он там говнокодил, но показал основные классы для работы с бд. Я не стал заморачиваться и взял как он MySql.
В дальнейшем пересяду на Azure || MS SQL Server
0
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
02.04.2023, 23:52
Цитата Сообщение от contempio Посмотреть сообщение
ну никакое пока что
Тогда нефиг страдать.

Общий подход такой:
- если много пользователей, и укаждого свой уровень доступа, то подымается отдельный сервис с публичным API (web api, rest, wcf, gRPC. Возможно стоит смотреть в сторону последнего, правда тут уверености нет). Приложение ничего не знает о БД, и работает только с публичным API. Сам сервис либо на отдельной машине, либо на той, где админу-учетка под паролем, и юзера не могут зайти на папку где расположен сам сервис.
- если пользователь один (например база игр на ПК аля steam или меседжер), то тогда как правило используется гораздо "проще" БД, например sqlite. Опционально можно шифровать БД или содержимое через пароль, который вводит пользователь.
- опять же исходя из задачи, могут менятся подходы от "таки используем полновесную СУБД" до "фигачим тупо в файл".

Добавлено через 12 минут

Не по теме:

Цитата Сообщение от contempio Посмотреть сообщение
Просто попал на канал недо-прогера - Дударя, он там говнокодил, но показал основные классы для работы с бд.
После ознакомления с этим чудом, вспомнилась хохма: вот цифры от 0 до 9, вот знаки плюс и минус. Задание -- найдите логорифмический интеграл из мнимого корня от лямда-фи.



Добавлено через 4 минуты

Не по теме:

окей, беру слова обратно -- он реально не шарит.

0
Эксперт .NET
 Аватар для Usaga
14111 / 9328 / 1349
Регистрация: 21.01.2016
Сообщений: 35,031
03.04.2023, 04:00
Цитата Сообщение от contempio Посмотреть сообщение
В дальнейшем пересяду на Azure || MS SQL Server
Зачем MS SQL Server, когда тот же Azure работает и с MySQL и с Postgres?
0
 Аватар для Lasarex
8 / 7 / 1
Регистрация: 01.08.2019
Сообщений: 6
19.04.2024, 10:06
Вопрос был задан давно, но все же отвечу, вдруг ком-то пригодится.
Хранить строку подключения и в частности пароли в коде нельзя, это небезопасно. То же самое относится и к хранению этих данных в файле App.config, который также копируется в открытом виде в каталог приложения при компиляции.
Кроме того, для тех кто пользуется системами контроля версий, например git, все эти секреты копируются в репозиторий, что также не есть хорошо.
Наиболее безопасно хранить секреты в отдельном config файле за пределами каталога проекта и рабочего каталога приложения. А вот ссылку на этот файл уже указывать в файле App.config.

Пример App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings file="C:\config\MyAppOptions.config">
<add key="MyOpenKey" value="0" />
</appSettings>
</configuration>

В этом примере секция appSettings содержит открытое значение ключа MyOpenKey, и ссылку на файл за пределами проекта MyAppOptions.config, значения которого приложение автоматом подтягивает из этого файла в процессе работы.

Пример MyAppOptions.config

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
<add key="connectionString" value="server=localhost;port=3306;userna me={0};password={1};database=AuthDataMyC lient" />
</appSettings>

При установке приложения у пользователя, необходимо будет добавить этот файл по указанному в App.config пути.
В итоге мы:
- не храним секреты в проекте,
- имеем для каждой установки приложения свою строку подключения, которая не меняется при обновлении.
0
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,590
Записей в блоге: 1
19.04.2024, 12:50
Lasarex, да борода это всё
1
 Аватар для Andrey-MSK
3317 / 2204 / 387
Регистрация: 14.08.2018
Сообщений: 7,411
Записей в блоге: 4
19.04.2024, 12:52
Цитата Сообщение от Lasarex Посмотреть сообщение
Пример App.config
Цитата Сообщение от Lasarex Посмотреть сообщение
Пример MyAppOptions.config
А зачем два файла? Чем один не устраивает с такой же строкой?
0
 Аватар для Lasarex
8 / 7 / 1
Регистрация: 01.08.2019
Сообщений: 6
19.04.2024, 14:44
Цитата Сообщение от Andrey-MSK Посмотреть сообщение
А зачем два файла? Чем один не устраивает с такой же строкой?
Вот ссылка на официальную документацию зачем два файла.

https://learn.microsoft.com/ru... -and-azure
1
Эксперт .NET
 Аватар для Wolfdp
3789 / 1766 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
19.04.2024, 18:14
Цитата Сообщение от Lasarex Посмотреть сообщение
Хранить строку подключения и в частности пароли в коде нельзя, это небезопасно.
Не совсем. Обычно для серверных файлов стоит полный запрет для не админов. Можно предположить ситуацию, когда у сторонего пользователя есть права на readOnly, но в целом это та ещё шляпа.

Зашивать строку подключения в код не стоит по немного другим причинам -- это неудобно в использовании.

Вообще более грамотный подход подразумевает отдельную учетную запись для запускаемого приложения, по которой есть доступ к БД. При таком подходе никаких логинов/паролей нигде хранить в принципе не нужно, но требует более муторной организации окружения.
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3392 / 2714 / 574
Регистрация: 04.09.2018
Сообщений: 8,534
Записей в блоге: 3
19.04.2024, 19:51
Ну вот реально - вопрос на уровне "фантазий" и знаний отвечающих, не приводящих в конечном итоге ни к чему. Так, поболтать, видимо.
Все просто на самом деле - если у ТСа база локальная, то не фиг парится. А если действительно там "что-то эдакое", то следуй общепринятым подходам, которые здесь, от части, тоже были озвучены.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.04.2024, 19:51
Помогаю со студенческими работами здесь

Программа защитник данных - где хранить пароль
Здравствуйте, я почти сделал программу которая защищает данные, но не могу сделать процедуру, которая при вводе пароля для защиты данных...

Как программе через пароль получить доступ к базы данных?
Если я поставил пароль на базу данных. То как программе через пароль получить доступ до базы данных? Я хачу хранить список ников и...

Как вытащить из базы данных сайта информацию о пользователях их логин и пароль
Являюсь владельцем сайта необходимо достать все данные о пьзователях сайт dle из сервера база была удалена но осталась на компе.

Хранить e-mail в cookies безопасно?
В куки храню сейчас только id юзера из БД, но есть необходимость выводить e-mail юзера на каждой странице внутри аккаунта. Безопасно ли его...

Безопасно ли хранить данные в SQLite?
Здравствуйте, уважаемые программисты! Не могли бы вы мне помочь? Безопасно ли хранить данные в SQLite? Что нужно сделать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru