Как создать учетные записи MySQL из программы Python?
Есть приложение на Python, которое использует MySQL базу данных. Но чтобы оно работало корректно, нужно предварительно создать учетную запись MySQL в консоли. При этом в коде на Python используются пароль и имя этого пользователя. Также в коде Python для создания БД и таблиц используется известный, заранее заданный пароль root MySQL. Это все сильно смущает ввиду абсолютного отсутствия безопасности. Поэтому нужно реализовать функционал, позволяющий создать учетную запись пользователя MySQL при первом запуске программы из самой программы, а также функционал позволяющий поменять root пароль от MySQL из самой программы. Глядел в сторону модулей os и subprocess, но толкового ничего не вышло, увы(
"Также в коде Python для создания БД и таблиц используется известный, заранее заданный пароль root MySQL.
Это все сильно смущает ввиду абсолютного отсутствия безопасности."
"а также функционал позволяющий поменять root пароль от MySQL из самой программы"
Вас смущает наличие пароля от рута, но не смущает возможность потом его задать?
Зачем менять шило на мыло?
Вынесите логины и пароли из кода в конфиг файлы, и создавайте юзеров нормальными средствами.
В целом идея была следующая: при запуске программы, она запросит у пользователя ввести новый пароль для root, он его вводит, под капотом от введенной строки берется хеш, который и станет новым паролем root. При последующих запусках программы пользователь будет вводить пароль, от которого опять же будет браться хеш и присваиваться в качестве значения ключа 'password' в конфиг-словаре, который используется для подключения к БД. Возможно эта идея бредовая, мои знания пока еще на очень начальном уровне, но решение этой проблемы для меня выглядело именно так. И я смотрел в сторону того, что из программы каким-то образом будет в терминале выполняться команда типа 'mysqladmin -u root password "newpass"'. Но у меня ничего такого не вышло. В случае использования конфиг файла с паролями, что мешает злоумышленнику просто взять его и получить все пароли так же, как если бы они были заданы прямо в коде самой программы?
Можно создать аккаунт для приложения в целом и через этот аккаунт ходить в БД.
Пользователи работают с приложением (и при этом не имеют напрямую доспупа к БД), контроль прав происходит на уровне приложения, там же происходит добавление новых пользовательских аккаутнов, но это уже не аккаунты БД, а аккаунты приложения.
Храните доступы как Вам удобно. Тот же битрикс хранит доступы к базе открыто в подключаемых файлах. Главное, чтобы на файлах и директориях стояли правильные права, которые не позволят обычным пользователям читать файлы с паролями. Только отдельный пользователь из под которого выполняется приложение и администратор могут его читать.
Я не эксперт в вопросах безопасности, но концепция состоит в том, чтобы приложению были доступны минимально необходимые привилегии для его работы и не более (это касается и настроек привилегий для пользователя СУБД, никаких рутов и грант олл!)