簡體   English   中英

如何使用SQLalchemy安全地連接到MySQL數據庫?

[英]How to connect securely to a MySQL database using 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)

假設這是正確的方法,我對此代碼的第一個問題是:

  • 通過Internet發送未加密的用戶和密碼,這不是一個潛在的安全問題嗎? 應采取某種措施防止密碼竊取? 如果是這樣,我應該做什么呢?

我現在面臨的另一個問題是關於用戶:

  • 每個應用程序用戶是否應該與不同的MySQL數據庫用戶對應,或者將數據庫客戶端與單個用戶對應,然后將我的客戶端用戶添加到表(用戶ID,密碼......)中,定義和管理它們更為正確在應用程序代碼中?

通過Internet發送未加密的用戶和密碼,這不是一個潛在的安全問題嗎? 應采取某種措施防止密碼竊取? 如果是這樣,我應該做什么呢?

將(MySQL)數據庫提供給Web是一個基本問題。 使用MySQL,您可以將其配置為需要ssh-tunnels或ssl-certificates,這兩種方法都可以防止以明文形式發送密碼。 通常,您必須編寫客戶端軟件和位於靠近數據庫的服務器上的服務器軟件(以及客戶端/服務器之間的協議)。

每個應用程序用戶是否應該與不同的MySQL數據庫用戶對應,或者將數據庫客戶端與單個用戶對應,然后將我的客戶端用戶添加到表(用戶ID,密碼......)中,定義和管理它們更為正確在應用程序代碼中?

兩者都不比另一個更正確,但取決於您的數據庫(和您的客戶端計算機),它可能會影響許可成本。

通常,您的客戶端將使用您將要編寫的服務器軟件對用戶進行身份驗證,然后服務器軟件將使用單個數據庫登錄來聯系數據庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM