16

アプリケーションを作成していて、データベースに接続する必要があります。アプリケーションが選択や挿入などの操作を実行できるように、データベースにはログイン/パスワードが必要です。

アプリケーションでは、ログインとパスワードを使用してデータベースに接続する必要があるため、アプリケーションはデータベースでいくつかのタスクを自由に実行できます。私の質問は、パスワードを公開せずにデータベースに接続するためにパスワードを保存して使用するにはどうすればよいですか?

データベースはパスワードを認識しなければならないため、単純にハッシュや暗号化を使用してパスワードを保存することはできません (ほとんどまたはすべてのデータベースはパスワードをプレーン テキストとして受け取る必要があると思います)。

.

.

注: 接続はアプリケーションによって行われます。接続を行うための人間の入力はありません。

(編集) アプリケーションに関する詳細情報: サーブレット/jsp を使用する Web アプリケーションです。データベースは、アプリケーションと同じサーバー上にあります。アプリケーションのユーザーは、完全な管理権限を持たないデフォルト ユーザーですが、行を挿入/削除したり、クエリやテーブルのデータ変更に関連するほとんどのことを実行したりできます。

4

4 に答える 4

10

これを行う通常の方法は、実行時に読み取られるプロパティ/構成ファイルにユーザー名/パスワードを外部化することです (ネイティブ JDBC/JNDI/CDI/J2EE データソース/etc を使用するかどうかに関係なく)。

ファイルは、システム管理者によって O/S セキュリティを介して保護されています。

O/S には、アプリ コードよりも優れた保護ツールがあります。

于 2012-06-19T01:05:24.927 に答える
7

これには構成ファイルを使用する必要があります。スプリングとJDBCを併用して、生活を楽にしてください。

http://www.youtube.com/watch?v=f-k823MZ02Q

SpringフレームワークとJDBCの使用に関する上記のすばらしいチュートリアルを確認してください。彼のJDBCと春のチュートリアルをすべてご覧ください。ところで、彼は設定ファイルやワイヤービーンなどにパスワードを保存する方法をカバーしています。これがお役に立てば幸いです。

于 2012-06-19T02:13:45.373 に答える
7

暗号化にはjasyptを使用できます。また、ユーザー名とパスワードを datasource.properties ファイルに保存します。

public Connection getConnection() throws IOException{
    try{
        BasicTextEncryptor encryptor = new BasicTextEncryptor();
        encryptor.setPassword("jasypt");

        Properties props = new EncryptableProperties(encryptor);
        props.load( this.getClass().getResourceAsStream("datasource.properties") );

        String driver = props.getProperty("datasource.driver");
        String url = props.getProperty("datasource.url");        
        String userName = props.getProperty("datasource.userName");          
        String password = props.getProperty("datasource.password");

        Class.forName(driver);
        Connection conn = DriverManager.getConnection(url, userName, password);
        conn.setAutoCommit(false);

        return conn;
    } catch(ClassNotFoundException e) {
        e.printStackTrace();
        return null;

    } catch(SQLException e) {
        e.printStackTrace();
        return null;
    }
}
于 2012-06-19T01:17:23.353 に答える
5

Web アプリの場合は、Java EE アプリ サーバーにデプロイし、JNDI リソースを使用して接続します。JNDI データ リソースを設定した管理者だけが、接続に必要な資格情報を知る必要があります。ユーザーと開発者はそれらを知る必要さえありません。JNDI ルックアップ名だけです。

データベース所有者以外の誰かがユーザー名とパスワードを知る必要性を完全に排除することはできませんが、その知識をアプリ サーバー所有者に限定することは可能です。

また、そのアプリケーションのためだけに別の資格情報を作成し、そのタスクを完了するために必要な最小限のアクセスと権限を付与することをお勧めします。アプリケーションの範囲外のシステム テーブルやその他のリソースについての知識は必要ありません。IF DELETE 権限が必要ない場合は、付与しないでください。アクセスを読み取り専用にする必要がある場合は、その資格情報に付与する必要があります。

于 2012-06-19T01:04:27.480 に答える