2017-03-17 72 views
0

我正在開發一個Python3/tkinter應用程序,我希望它的數據庫功能基於遠程MySQL服務器。我發現了SQLalchemy,我試圖瞭解遠程訪問和用戶認證的最佳實踐。將有一個客戶端應用程序會要求輸入用戶名和密碼,然後它將獲取,插入和更新遠程數據庫中的數據。如何使用SQLalchemy安全連接到MySQL數據庫?

現在,我開始有明顯的主板,下面的一些教程中的步驟:

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:[email protected]_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數據庫的用戶,或者是更正確的有數據庫客戶端與單個用戶然後將我的客戶用戶添加到表中(用戶標識,密碼...),在應用程序代碼中定義和管理它們?

回答

0

是不是在這裏通過互聯網發送加密的用戶 和密碼潛在的安全問題呢?應該採取某種 措施來防止密碼被竊取?如果是這樣,我應該怎麼做 而不是?

有一個(MySQL)數據庫可用於網絡的根本問題。使用MySQL,您可以將其配置爲需要ssh-tunnels或ssl-certificates,這兩者都可以防止以明文形式發送密碼。一般來說,您必須編寫客戶端軟件和位於服務器附近的服務器軟件(以及客戶端/服務器之間的協議)。

如果每個應用程序的用戶對應不同的MySQL數據庫 用戶,或者是更正確的有數據庫客戶端與單個 用戶,然後加我的客戶端用戶在一個表(用戶ID,密碼。 ..), 在應用程序代碼中定義和管理它們?

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

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

+0

那麼,目前我沒有SSH訪問權限,所以運行自定義Python應用服務器端似乎遙不可及。那麼,我想首先我需要聯繫我的託管服務提供商才能檢查。 –