15

サーバーの 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 設定でした。

研究を行っている人には、これを回避する方法がいくつかあります。

  1. HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled にあるレジストリ設定を変更できます。FIPS が有効な場合、値は 1 です。無効な場合、値は 0 です。再起動する必要はありません。

  2. ほとんどの場合、この問題が発生する理由は、FIPS が有効になっており、Oracle マネージド データ アクセス ライブラリを使用しているためです。確実な回避策は、管理されていないライブラリを使用することです。ただし、このライブラリを使用するには、Oracle Instant Client をインストールする必要があります。クライアントは、 Oracle Data Access Componentsでダウンロードできます。

  3. サーバーを Oracle 12.2c にアップグレードします。12.2c より前の Oracle 12c バージョンには、まだこの問題があります。

FIPS を有効にしていない場合は、データベースで SEC_CASE_SENSITIVE_LOGON 設定が true に設定されているかどうかを調査する必要があります。ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE; を実行する必要があります。次に、すべてのパスワードをリセットします。

4

9 に答える 9

15

私はこの同じ問題に数週間苦労してきましたが、最終的に解決しました。FIPS セキュリティ ポリシーを無効にする必要がありました。このキーを設定してみてください。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] "有効"=dword:00000000

ゼロまで、それは私にとって完璧に機能しました

私はあなたのスレッドをたどっていましたが、あなたの空白のパスワードの問題は最終的に私をここに指摘しました:

https://community.oracle.com/thread/2557592?start=30&tstart=0

于 2014-10-31T19:34:10.893 に答える
10

ジェフの回答 (2014 年 10 月 31 日) に基づく...

レジストリ設定は、FIPS 準拠のアルゴリズムのみを許可するように GPO で設定できます。示されているようにこれを 0 に設定すると、一部のセキュリティ ポリシーに違反し、GPO によって上書きされる可能性があります。このレジストリ設定は、IIS や ASP.NET だけではありません。

.NET に固有で、アプリケーション レベルで機能する別の方法があります。これは、サーバー全体の設定を変更するよりもはるかに簡単に正当化できます。

アプリケーション固有の方法:

Web.config または App.config ファイルで、次の設定を追加します。

<configuration> <!-- Will already be there -->
  <runtime>
    <enforceFIPSPolicy enabled="false"/>
  </runtime>
...  the rest of your .config

私の記憶が正しければ、これは構成ファイルの先頭にあるはずです。

すべての .NET アプリケーションの方法:

上記の設定を machine.config ファイルに配置します。.NET のバージョンとアーキテクチャ (64 ビット/32 ビット) ごとに 1 つ存在します。要素が既にあるので、その中に要素を入れます。

于 2014-11-06T21:59:01.050 に答える
2

Entity Framework と Oracle.ManagedDataAccess.Client を使用して同じ問題が発生しましたが、構成接続文字列セクションでパスワードを大文字にすることである程度成功しました。

于 2018-10-22T22:05:47.747 に答える
0

このケースとまったく同じシナリオではありませんでしたが、非常によく似た結果が得られました。問題を解決するために私がしたことは、パスワードを次のように引用符で囲んだことです (VB.NET):

cnx.ConnectionString = "User ID=MYID;Password=""MyPass"" ;Data Source=MyTEST"

または chr(34) を次のように使用します

cnx.ConnectionString = "User ID=MYID;Password="+chr(34)+"MyPass"+chr(34)+" ;Data Source=MyTEST"
于 2016-01-07T11:19:47.597 に答える
0

私は同じ問題を抱えていました!RegKey を変更しようとはしませんでしたが、Web とマシンの構成を変更しようとしました。これはうまくいきませんでした。

問題を解決したのは、私が実行していたアプリ プールを変更することでした!

アプリケーション プールはサービス アカウントで実行されていましたが、デフォルトのシステム アカウントだけを使用して新しいアプリケーション プールに移動すると、構成からユーザー ID とパスワードが取得され始めました。

于 2018-07-13T01:24:58.037 に答える