DB(Oracle)に直接接続するJavaデスクトップアプリケーションがあります。アプリケーションには複数のユーザー アカウントがあります。ネットワーク経由でユーザーのパスワード (DB パスワードではない) を送信する正しい方法は何ですか? プレーンテキストで送信したくありません。
5 に答える
セキュリティで保護されたソケット接続を介して接続するか、パスワードをデータベースに送信する前にローカルでハッシュすることができます (またはその両方)。理想的には、パスワードがプレーン テキスト形式で存在するのは、ハッシュする前だけです。クライアント側でそのすべてを実行できる場合は、より多くのことを実行できます。
OracleクライアントとOracleデータベースの間でSSL接続を使用できます。JDBCを使用してOracleクライアントとサーバー間でSSLを構成するには、次のようにします。
サーバー側:
1)まず、リスナーはTCPSプロトコルを使用するように構成する必要があります。
LISTENER = (ADDRESS_LIST= (ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484)))
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/server/wallet/path/)))
クライアント側:
ojdb14.jar
1)次のjarファイルはクラスパスである必要があります
oraclepki.jar
、、ojpse.jar
2)接続に使用するURLは次のとおりです。
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=servername)(PORT=2484))(CONNECT_DATA=(SERVICE_NAME=servicename)))
3)以下のプロパティを設定する必要があります(システムプロパティ(-Dオプション)または接続するプロパティとして)
javax.net.ssl.trustStore,
javax.net.ssl.trustStoreType,
javax.net.ssl.trustStorePassword
参照:http ://www.oracle.com/technology/tech/java/sqlj_jdbc/pdf/wp-oracle-jdbc_thin_ssl_2007.pdf
ユーザーが選択したパスワードをプレーンテキストで送信しないことに同意します。ただし、公開鍵暗号化を使用しない限り、パスワードを電子メールで送信すると、パスワードは平文になります。私がよく目にすることの 1 つは、ユーザーがパスワードを忘れてパスワードの送信を要求すると、システムが新しいパスワードを生成し、そのパスワードをユーザーに送信することです。その後、ユーザーはパスワードを変更できます。
このようにして、ユーザーが選択したパスワード (ユーザーが他の場所で使用する可能性があるパスワード) は送信されませんが、一時パスワードはプレーンテキストで送信されるため、すぐに変更する必要があります。
中間層なしでDBに直接接続する場合は、実際のユーザーごとにDBユーザーを使用することを検討する必要があります。そうしないと、アプリケーションのアクセスを実際に保護できなくなります。
ORa * Netを使用してOracleに接続する場合、ユーザーパスワードは自動的に暗号化されます(Oracle 8以降)が、状況によっては暗号化されていないパスワードにフォールバックする場合があります。ORA_ENCRYPT_LOGIN=true
これは、クライアントの環境で無効にすることができます。
データをプレーンテキストで送信したくない場合は、暗号化を使用してください!!!
AES、Twofish などの暗号化アルゴリズムを使用します。
クライアントとサーバーの場所も考慮する必要があります。両方が同じマシンにある場合、暗号化を使用しても意味がありません。それらが異なるマシンにある場合は、暗号化アルゴリズムを使用して機密データを送信します。
パスワードの有効性を確認している場合は、パスワードのハッシュを送信するだけです。この方法は、パスワードを自分で比較している場合にのみ機能することに注意してください。他のアプリケーション (制御できない) が検証ジョブを実行している場合、パスワードをハッシュすることはできません。