Как безопасно подключиться к базе данных MySQL с помощью SQLalchemy?
Я нахожусь в процессе разработки приложения Python3/tkinter, которое я хочу, чтобы его функции баз данных основывались на удаленном сервере MySQL. Я нашел SQLalchemy, и я пытаюсь понять, каковы лучшие практики с точки зрения удаленного доступа и аутентификации пользователей. Будет клиентское приложение, которое запросит имя пользователя и пароль, а затем получит, вставит и обновит данные в удаленной базе данных.
Прямо сейчас я начинаю с чистой доски, следуя инструкциям в некоторых уроках:
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
engine = create_engine('mysql+pymysql://DB_USER:DB_PASSWORD@DATABASE_URL:PORT/DATABASENAME', pool_recycle=3600, echo=True)
Base = declarative_base()
connection = engine.connect()
class Process(Base):
__tablename__ = "processes"
id = Column(Integer, primary_key=True)
name = Column(String)
Base.metadata.create_all(engine)
Если предположить, что это правильный способ, мой первый вопрос об этом коде:
- Не является ли здесь потенциальной проблемой безопасности при отправке незашифрованного пользователя и пароля через Интернет? Должны ли быть приняты какие-то меры для предотвращения кражи паролей? Если так, что я должен делать вместо этого?
Другой вопрос, который у меня есть сейчас, касается пользователей:
- Должен ли каждый пользователь приложения соответствовать отдельному пользователю базы данных MySQL или более правильно иметь клиента базы данных с одним пользователем, а затем добавлять пользователей моего клиента в таблицу (идентификатор пользователя, пароль, ...), определяя их и управляя ими в коде приложения?
1 ответ
Не является ли здесь потенциальной проблемой безопасности при отправке незашифрованного пользователя и пароля через Интернет? Должны ли быть приняты какие-то меры для предотвращения кражи паролей? Если так, что я должен делать вместо этого?
Существует фундаментальная проблема с доступностью базы данных (MySQL) в Интернете. С MySQL вы можете настроить его на использование ssh-туннелей или ssl-сертификатов, которые не позволяют отправлять пароли в виде открытого текста. Как правило, вам нужно написать как свое клиентское программное обеспечение, так и часть серверного программного обеспечения, которое находится на сервере рядом с базой данных (и протокол между клиентом / сервером).
Должен ли каждый пользователь приложения соответствовать отдельному пользователю базы данных MySQL или более правильно иметь клиента базы данных с одним пользователем, а затем добавлять пользователей моего клиента в таблицу (идентификатор пользователя, пароль, ...), определяя их и управляя ими в коде приложения?
Ни один из них не является более правильным, чем другой, но в зависимости от вашей базы данных (и ваших клиентских компьютеров) это может повлиять на стоимость лицензирования.
Обычно ваш клиент аутентифицирует пользователей с помощью серверного программного обеспечения, которое вы будете писать, а затем серверное программное обеспечение будет использовать единый вход в базу данных для связи с базой данных.