1

私は、オフラインで動作する必要があるクライアントと、情報データベースを格納するサーバーとの間で送信されるsqlceデータベースを使用するプロジェクトに取り組んでいます。このデータベースは、パスワードで保護されています。

難しいのは、ユーザーがsqlceデータベースの情報を報告する前に最新バージョンに更新する必要がなく、クライアントの最新バージョンが数世代遅れて更新される可能性があるというビジネス要件があることです。サーバーがデータベース内の報告された情報にアクセスするために必要なパスワード。

現在の解決策は、ソースコードで、クライアントとサーバーで同じ静的パスワードを使用し、下位互換性のためにそれらを同じに保つことです。

私の質問は、クライアントとサーバー間でパスワードを同期し、古いデータベースとの下位互換性を維持するか、データベースからいくつかのパラメーターを取得してどのパスワードが一致するかを確認できる安全な方法についてです。

現在、sqlce3.1とC++を使用しています。この問題は他のプロジェクトにも適用できると思うので、他のテクノロジ(SQLight?C#?Java?)での同じ問題の解決策を歓迎します。

私の問題が明確であり、そこにたくさんの答えがあることを願っています。明確にする必要があることがあれば、私に聞いてください!

4

3 に答える 3

1

鍵交換による公開鍵暗号化が必要です。これをサポートするセキュリティサーバー(SOAPインターフェイスを備えたJavaプログラム)があります。この要件を満たす商用製品があります。それらをシステムに統合する必要があります。そのような場所全体でパスワードをハードコーディングしてはいけません。

于 2012-10-04T19:52:11.063 に答える
1

SQLにログインする各ユーザーは、データベースに独自のユーザーを持っているため、パスワードを維持できるユーザーをお勧めします。ユーザーのセッションを超えて何らかのアクションを実行するコードとして、構成ファイルに保存されている構成可能な接続文字列を使用してパスワードを管理でき、一部のツールユーザーがパスワードを更新できるため、たとえば、管理者はいつでも自分のパスワードを変更できますデータベースとコードは正しく機能します。一方、サーバー/クライアントの設計がある場合、サーバーは信頼できる接続を使用し、ログインしたユーザーを通じてセキュリティを維持でき、コードにパスワードを保存する必要はありません。

于 2012-10-04T19:52:34.757 に答える
0

だからいくつかのこと。
1)パスワードをソースコードにハードコーディングしないでください。私のような人がパスワードを見つけます。
2)サーバーはクライアント側のデータベースにアクセスしてはならず、クライアントは常にサーバーに報告する必要があります。

この情報で武装した今、私は自分のセットアップをこれらの線に沿ったものになるように再設計します。

各クライアントは、レポートの取得に使用する日次、週次、または任意の時間メトリックを送信します。これにより、パスワード管理に関する問題が軽減されます。また、これを行うことにより、サーバーは許可されたクライアントのホワイトリストを保持できるため、許可されていないクライアントや無効なクライアントがメインサーバーに報告するのを防ぐことができます。これを使用すると、サーバーは確かに気にしないので、クライアントがどれだけ遅れているかは問題ではなく、メッセージング構造はそれほど変更されるべきではありません。もしそうなら、おそらくクライアントに更新を強制する必要があります。

于 2012-10-05T13:38:04.363 に答える