あなたの懸念は理解していますが、あなたが望むものを正確に達成する方法はありません. アプリケーションがデータベースに接続する必要がある場合は、アクセス資格情報を「認識」する必要があります。
「難読化」技術 (「パスワードを暗号化し、オンザフライで復号化する」または「パスワードを別の場所から引き出す」など) は、問題を別の場所に移動させる緩和策にすぎません。
抽象化のレイヤーを追加することを検討する必要があります。アプリケーションは、最小権限の原則を適用して、アプリケーションが必要とする CRUD 機能のみを提供するリモート Web サービスにアクセスする必要があります。最新のクライアント/サーバー アーキテクチャは、「リッチ クライアント」(Swing アプリケーションなど) が DBMS と直接対話しないように設計されています。はい、遅くなりますが、より安全でスケーラブルです。また、リッチ クライアントは「あまりリッチ」 (ビジネス ロジックを実装しない) になり、テーブルを変更した場合などにクライアントを更新する必要がなくなります。
Web サービスを使用すると、複雑な制約を適用することもできます。たとえば、オンライン ヘルプ デスクを考えてみましょう。一般的なルールは、クローズされたチケットにメッセージを投稿できないことです。DBMSでそれをどのように実施しますか? あなたの DBMS にログインできれば、closed
属性が に設定されたチケットに好きなだけメッセージを投稿できます1
。一部の DBMS でサポートされていない面倒な CHECK 句がない限り、制約を強制するものはありません。
あなたのDBを隠してください!
REST は、Web サービス用の SOAP の軽量な代替手段と考えてください。Java では、 Jerseyを使用して REST サーバーとクライアントを簡単に作成できます。