サーバーの 1 つで困難な状況に陥っています。Oracle 12c データベースに接続する必要がある ASP.NET MVC 3 アプリケーションがあります。これは、次の接続文字列を使用して行われます。
User ID=myuserid;Password=mypass;Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=<IP ADDRESS>)(PORT = 1521)))(CONNECT_DATA=(SERVICE_NAME=PDB1)));
また、Oracle の Oracle.ManagedDataAccess バージョン 4.121.1.0 も使用しています。接続を試行するたびに、次のエラーが発生します。
ORA-01017: invalid username/password; logon denied
上記の資格情報を使用して、デスクトップに正常に接続できます。別のサーバーに同じコードがありますが、管理されていない古いバージョンのライブラリを使用しており、前述の資格情報で正常に接続できます。ただし、コードを実行したいサーバーは、異なるサーバーでの接続を成功させる同じ資格情報を使用して毎回失敗します。
失敗したサーバーでは、次のことができます。
- SQLPLUS経由で接続
- TNSPING でデータベースにアクセスする
- システム DSN を作成して ODBC 接続を確立する
すべての場所で TNSNAMES.ORA を確認しましたが、正しいようです。
データベースに何度もアクセスした後、アカウントは実際にロックされ、実際にデータベースにアクセスしたこと、およびデータベースが提示された資格情報を気に入らなかったことが示されました。以前に正常に接続されたアプリケーションを確認したところ、アカウントがロックされていることを示すエラーで失敗しました。アカウントのロックを解除すると、問題が発生しているサーバーを除いて、これらのアプリケーションが正常に接続されました。
私は途方に暮れています。
この問題の原因について他に何か提案はありますか?
編集:
ローカル コンピューターと問題のあるサーバーに WireShark をインストールしました。デスクトップとデータベース、および問題のサーバーとデータベースの間の通信をキャプチャしました。私のデスクトップがパスワードを伝えていることがわかりました:
0080 35 42 31 41 43 34 30 00 01 01 01 0d 0d 41 55 54 5B1AC40......AUT
0090 48 5f 50 41 53 53 57 4f 52 44 01 40 40 43 30 36 H_PASSWORD.@@C06
00a0 37 39 42 31 31 42 46 36 42 41 43 44 39 30 38 44 79B11BF6BACD908D
00b0 37 39 34 34 31 31 46 34 32 33 30 42 34 36 44 36 794411F4230B46D6
00c0 35 36 36 33 31 42 45 39 39 41 36 43 36 37 42 44 56631BE99A6C67BD
00d0 43 33 35 42 42 44 36 44 42 45 37 34 36 00 01 0d C35BBD6DBE746...
一方、私が問題を抱えているサーバーはそうではありませんでした(または少なくともそれが仮定です):
0080 39 33 39 37 32 33 46 00 01 01 01 0d 0d 41 55 54 939723F......AUT
0090 48 5f 50 41 53 53 57 4f 52 44 01 40 40 00 00 00 H_PASSWORD.@@...
00a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00b0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00d0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 0d ................
パスワードが接続文字列に存在する場合でも、パスワードが送信されないようにするセキュリティ/構成設定を知っている人はいますか?
編集 (20180713):
私の特定のケースでは、問題は FIPS 設定でした。
研究を行っている人には、これを回避する方法がいくつかあります。
HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled にあるレジストリ設定を変更できます。FIPS が有効な場合、値は 1 です。無効な場合、値は 0 です。再起動する必要はありません。
ほとんどの場合、この問題が発生する理由は、FIPS が有効になっており、Oracle マネージド データ アクセス ライブラリを使用しているためです。確実な回避策は、管理されていないライブラリを使用することです。ただし、このライブラリを使用するには、Oracle Instant Client をインストールする必要があります。クライアントは、 Oracle Data Access Componentsでダウンロードできます。
サーバーを Oracle 12.2c にアップグレードします。12.2c より前の Oracle 12c バージョンには、まだこの問題があります。
FIPS を有効にしていない場合は、データベースで SEC_CASE_SENSITIVE_LOGON 設定が true に設定されているかどうかを調査する必要があります。ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; を実行する必要があります。次に、すべてのパスワードをリセットします。