3

MySQLサーバーに支えられたDjangoを利用したサイトを構築中です。このMySQLサーバーは、テーブルデータの読み取りと書き込みを行うために、Webサイト以外の追加のソースからアクセスされます。データベースに接続するユーザーがローカルで実行するプログラムなど。

現在、ローカルで実行されているプログラムは、MySQL / Cコネクタライブラリを使用してSQLサーバーに直接接続し、クエリを実行しています。一般公開の最終リリースでは、コードまたは構成ファイルでデータベースへの接続文字列を公開するため、これは安全ではないようです。

私が検討している代替案の1つは、すべてのクエリをDjango Webサイト(ユーザーのログインとパスワードで認証)に送信し、サイトがユーザーに代わってクエリをサニタイズして実行し、結果をユーザーに返すことです。

これには、私が考えることができるいくつかの欠点があります。すべてのSQLクエリを処理することにより、Webサーバーの負荷が大幅に増大し、ホストの制限を超える可能性があります。さらに、PythonでSQL結果をシリアル化して送信し、クライアント側のC /C++でそれらを非シリアル化する方法を理解する必要があります。これは、記述および保守するための適切な量のカスタムコードになります。

このアプローチのその他の欠点は、人々が考えることができますか?

これは合理的に聞こえますか?もしそうなら、それに取り組むのを容易にすることができる何か。プロキシインターフェイスの開発に役立つPythonやCライブラリなど?

悪い考えのように聞こえる場合は、代替ソリューション、つまりこのタイプのプロキシSQLサーバーロジックに特化したPythonライブラリ、SQL接続文字列を暗号化して現在のソリューションを安全に使用できるようにする方法などの提案はありますか?

最後に、これは有効な懸念事項ですか?データベースには現在、ユーザーに関する非常に機密性の高い情報は含まれていません(最も機密性の高いのは、ユーザーの電子メールと、別のソースから再利用した可能性のあるサイトのパスワードです)が、将来的には、安全でない場合に懸念される可能性があります。

4

1 に答える 1

1

これは完全に有効な懸念事項であり、非常に一般的な問題です。RESTfulAPIの作成について説明しました。データベースのプロキシと見なすことができると思いますが、通常はプロキシとは呼ばれません。

Djangoは、これを実現するために使用する優れたツールです。Djangoには、迅速な開発を支援するパッケージもいくつかあります。DjangoREST Framework、Tastiepy、およびdjango-pistonが最も人気があります。もちろん、昔ながらのDjangoを使用することもできます。

Djangoプロジェクトは、データベースとインターフェイスする唯一のものであり、クライアントは認証されたリクエストをDjangoに送信できます。そのため、クライアントがデータベースに直接接続することはありません。これにより、クライアントごと、リソースごとに、きめ細かい権限制御が可能になります。

すべてのSQLクエリを処理することにより、Webサーバーの負荷が大幅に増大し、ホストの制限を超える可能性があります。

Webサービスのスケーリングは、クライアントからデータベースへの直接接続のスケーリングよりもはるかに簡単になると思います。データベースに対して毎秒数百のリクエストがあるアプリをスケーリングするための、多くの試行錯誤された真の方法があります。あなたとウェブサーバーの間にDjangoがあるので、頻繁に要求されるリソースのキャッシュを実装できます。

さらに、PythonでSQL結果をシリアル化して送信し、クライアント側のC /C++でそれらを非シリアル化する方法を理解する必要があります。

これは議論の余地のある問題であるはずです。非常に人気のあるデータ交換フォーマットがたくさんあります。私はC/C ++を使用したことがありませんが、簡単に検索すると、いくつかのc / c++jsonシリアライザーが見つかりました。Pythonには無料でJSONが組み込まれているため、事前に作成されたC / C ++ JSONライブラリを使用する場合、これに関して維持するカスタムコードはありません。

このアプローチのその他の欠点は、人々が考えることができますか?

マイナス面はないと思いますが、これは実証済みの方法です。それは10年間証明されており、世界で最も人気のあるサイトは安らかなAPIを通じて自分自身を公開しています

これは合理的に聞こえますか?もしそうなら、それに取り組むのを容易にすることができる何か。プロキシインターフェイスの開発に役立つPythonやCライブラリなど?

非常に合理的に聞こえます。回答の冒頭で述べたDjangoアプリは、APIをより早く開始できるようにするための定型文を提供する必要があります。

于 2013-02-20T23:43:56.530 に答える