ユーザーのパスワードを生成してデータベースに保存する Java デスクトップ アプリケーションを作成しています。
私の質問は、アプリケーションに SQL クエリを実装する最も安全な方法は何ですか?
確かに、ソース コード内にクエリを含めることは安全ではありません。私の回避策は、db ファイルをローカルに保存することですが、データを外部サーバーに保存することをお勧めします。
では、ソース コードを埋め込まずに Swing アプリケーションに SQL クエリを実装するにはどうすればよいでしょうか。
確かに、ソース コード内にクエリを含めることは安全ではありません。
機密性の高い SQLクエリは見たことがありません。通常、ユーザーからの機密データ (Swing フィールドへのパスワード入力など) を受け取り、これを使用して既存のパラメーター化されたクエリを入力します。
UPDATE users SET password=? WHERE username=?
クエリ テキストを保護する必要はありません。クエリで使用されるパラメーターのログ記録に関して懸念がある場合があります。生のパスワードをデータベースに保存する場合、これは問題です。そのため、そもそも生のパスワードを保存しないことをお勧めします。
SQL を Java コードに埋め込む方法について少し詳しく説明します。アプリケーションがデータベースで動作する場合、データベースを呼び出す必要があり、これは SQL ステートメントの実行を意味します。これを回避する唯一の方法は、この作業を別のアプリケーションに委任して、アプリケーションが SQL ではなくカスタム プロトコル/API を使用し、そのアプリケーションが代わりに SQL クエリを実行するようにすることです。
SQL を Java コードとは別に保存する必要があるかもしれませんが、これはセキュリティ上の懸念によるものではなく、主にアプリケーションをより適切に構造化する必要があるためです。SQL を Java コードに埋め込まない主な原動力は、コードの読みやすさ、パフォーマンス、メンテナンス、およびコードの再利用です。
データベースにアクセスするときは、ORM を使用するのが一般的です。この場合、アプリケーションに SQL コードがまったくなく、ORM API を介してデータベースにアクセスすることは珍しくありません。たとえば、休止状態では、クエリは次のようになります
User user = session.createCriteria(User.class)
.add( Restrictions.eq("name", userName) )
.uniqueResult();
また、選択した ORM で直接サポートされていない SQL クエリを実行する必要がある場合でも、SQL テキスト自体は通常、付随する xml ファイルに保存されます。
後者の場合、技術的に SQL は Java コードに埋め込まれていませんが、アプリケーション パッケージの 1 つに存在することに注意してください。
アプリケーションを実装せずにアプリケーションで何かを実行する方法がわかりません。私は単にあなたのアプローチを理解していません。あなたはおそらく新しいユーザーか何かを登録したいと思っていて、データベース構造を明らかにしたくないと思いますよね? DBを(SQLで)直接操作し、アプリにコーディングしないために、そのようなことを行うことはできません。
解決策: ニーズに合わせて専用の REST API を作成します。すべてのデータベース操作の処理はサーバー側で行われます(サーバーが必要です-phpの単純なApacheホスティングである可能性があります)ので、DB構造の啓示などはありません。必要なのは、適切なデータ(ユーザー名とパスワード)を使用してコマンドをサーバーに送信することだけです. 最大限のセキュリティを確保するには、API との通信に SSL を使用する必要があります。
ありがとうございました。