2017-03-17 20 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データベースのユーザーに対応し、またはそれは、単一のユーザーとデータベースクライアントを持つことがより正確であるべきクライアントのユーザーをテーブル(ユーザーID、パスワードなど)に追加し、アプリケーションコードで定義して管理しますか?

答えて

0

は、ここでは、インターネットを介して暗号化されていないユーザー とパスワードを送信することにより、潜在的なセキュリティ上の問題はありませんか?パスワードを盗むのを防ぐために何らかの種類の 対策を講じる必要がありますか?もしそうなら、代わりに をどうすればいいですか?

(MySQL)データベースをWebで使用できるという根本的な問題があります。 MySQLでは、ssh-tunnelまたはssl-certificatesが必要となるように設定することができ、どちらもクリアテキストのパスワードの送信を防ぎます。一般的には、クライアントソフトウェアと、データベースに近いサーバー(およびクライアント/サーバー間のプロトコル)にあるサーバーソフトウェアの両方を記述する必要があります。

は、各アプリケーションのユーザーは、別のMySQLデータベース ユーザーに対応し、またはそれをより正確シングル ユーザーとデータベースクライアントを持っているし、テーブル(ユーザID、パスワードで私のクライアントユーザーを追加することであるべきです。 ..)、 これらをアプリケーションコードで定義して管理していますか?

データベース(およびクライアントマシン)によっては、ライセンスコストに影響する可能性があります。

通常、お客様のクライアントは、作成するサーバーソフトウェアでユーザーを認証し、サーバーソフトウェアはデータベースに接続するために単一のデータベースログインを使用します。

+0

現在、私はSSHアクセス権を持っていないため、カスタムPythonアプリケーションサーバー側を実行すると手の届かないようです。さて、私はまずそれを確認するために私のホスティングプロバイダに連絡する必要がありますね。 –

関連する問題