Что делать с учетными данными базы данных в коде
Я использую библиотеку MySQL++ от Tangentsoft для подключения к базе данных MySQL из программы на C++. Вы передаете учетные данные базы данных методу connect объекта Connection для соединения с вашей базой данных. Очевидно, что это довольно плохо: если кто-то злоумышленник разберет бинарный файл вашего приложения, ваши системы будут скомпрометированы.
Теперь обходной путь для безопасной работы с базой данных из C++ будет состоять в том, чтобы просто использовать клиентскую библиотеку HTTP и иметь что-то вроде PHP-сценария, взаимодействующего с вашей базой данных (ваши учетные данные надежно хранятся в файле.ini где-то в частном порядке на вашем сервере).). Проблема в том, что вы не получаете таких тонкостей, как библиотека MySQL++, таких как потоки запросов и преобразование типов C++ в SQL (и обратно).
Поэтому, если у кого-то есть предложения для начинающего программиста о том, как безопасно использовать библиотеку, такую как MySQL++, я был бы признателен, если бы вы поделились ими.
1 ответ
Я тоже использую MySQL++, и, хотя вы должны передать информацию о подключении к Connection
конструктор, нет никакой причины, что они должны быть жестко закодированы в ваш двоичный файл.
Я читаю их из /etc/<productname>.conf
файл на диске, а затем передать полученный std::string
объекты в конструктор. Таким образом, безопасность файла конфигурации зависит от системного администратора. В конечном счете, учетные данные должны быть как-то известны вашему приложению, но вы можете снять с себя почти всю ответственность за их защиту. Важно отметить, что ни в коем случае учетные данные для конкретного сервера базы данных, встроенные в само приложение.
Вы должны сделать это в любом случае, если только вы не хотите, чтобы ваше приложение работало только с одним сервером базы данных и с одним неизменным набором учетных данных.