如何使用SQLalchemy安全地连接到MySQL数据库?

时间:2017-03-17 12:30:04

标签: python mysql security authentication 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数据库用户,还是让数据库客户端只有一个用户,然后在表中添加我的客户端用户(用户ID,密码......)更正确并在应用程序代码中管理它们?

1 个答案:

答案 0 :(得分:0)

  

通过发送未加密的用户,这不是一个潜在的安全问题   和密码通过互联网?应该采取某种形式   防止密码窃取的措施?如果是这样,我该怎么办   代替?

将(MySQL)数据库提供给网络存在一个基本问题。使用MySQL,您可以将其配置为需要ssh-tunnels或ssl-certificates,这两种方法都可以防止以明文形式发送密码。通常,您必须编写客户端软件和位于靠近数据库的服务器上的服务器软件(以及客户端/服务器之间的协议)。

  

每个应用程序用户是否应该对应不同的MySQL数据库   用户,或者让数据库客户端只有一个更正确   用户然后在表中添加我的客户端用户(用户ID,密码,...),   在应用程序代码中定义和管理它们?

两者都不比另一个更正确,但取决于您的数据库(和您的客户端计算机),它可能会影响许可成本。

通常,您的客户端会使用您正在编写的服务器软件对用户进行身份验证,然后服务器软件将使用单个数据库登录来联系数据库。