Как безопасно подключиться к базе данных 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 или более правильно иметь клиента базы данных с одним пользователем, а затем добавлять пользователей моего клиента в таблицу (идентификатор пользователя, пароль, ...), определяя их и управляя ими в коде приложения?

Ни один из них не является более правильным, чем другой, но в зависимости от вашей базы данных (и ваших клиентских компьютеров) это может повлиять на стоимость лицензирования.

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

Другие вопросы по тегам