我正在开发一个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)
假设这是正确的方法,我对此代码的第一个问题是:
我现在面临的另一个问题是用户:
答案 0 :(得分:0)
通过发送未加密的用户,这不是一个潜在的安全问题 和密码通过互联网?应该采取某种形式 防止密码窃取的措施?如果是这样,我该怎么办 代替?
将(MySQL)数据库提供给网络存在一个基本问题。使用MySQL,您可以将其配置为需要ssh-tunnels或ssl-certificates,这两种方法都可以防止以明文形式发送密码。通常,您必须编写客户端软件和位于靠近数据库的服务器上的服务器软件(以及客户端/服务器之间的协议)。
每个应用程序用户是否应该对应不同的MySQL数据库 用户,或者让数据库客户端只有一个更正确 用户然后在表中添加我的客户端用户(用户ID,密码,...), 在应用程序代码中定义和管理它们?
两者都不比另一个更正确,但取决于您的数据库(和您的客户端计算机),它可能会影响许可成本。
通常,您的客户端会使用您正在编写的服务器软件对用户进行身份验证,然后服务器软件将使用单个数据库登录来联系数据库。