web-dev-qa-db-ja.com

Oracle.ManagedDataAccessおよびORA-01017:ユーザー名/パスワードが無効です。ログオンが拒否されました

私たちのサーバーの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でデータベースにアクセスする
  • ODBC接続を確立するためにシステムDSNを作成します

すべての場所で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に設定されているかどうかを調査する必要があります。ALTERSYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSEを実行する必要があります。次に、すべてのパスワードをリセットします。

13
DerHaifisch

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

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

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

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

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

11
Jeff McConnell

ジェフの答え(2014年10月31日)に基づいて...

レジストリ設定は、GPOによってFIPS準拠アルゴリズムのみを許可するように設定できます。これを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つあります。すでに要素があるので、その中に要素を置きます。

10
John O'Reilly

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

2
ameritrash

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

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

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

0
Robert Stokes

このケースとまったく同じシナリオはありませんでしたが、非常によく似た結果が得られました。問題を解決するために私がしたことは、パスワードを次のように引用符で囲みました(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"
0
gouderadrian

何らかの理由で(なぜか分からない)、小文字で書いても、c#コードはユーザー名を大文字で送信します。

たとえば、私のユーザー名はkullaniciadiですが、大文字はKULLANICIADIだと思うかもしれませんが、そうではないようです。サーバーのロケールはトルコ語です(これが理由だと思います)。ユーザー名の大文字のバージョンはKULLANİCİADİになります。トルコ語では、iの大文字はİで、ıの大文字はIです。そして、これは無効なユーザー名エラーをもたらします。

データベースを制御できなかったため、データベースの設定を変更できません。

ユーザー名をすべて大文字で入力すると問題は解決しました。

また、これは受け入れられた回答の組み合わせでのみ機能します。受け入れられた回答に記載されているレジストリキーが1に設定されている場合、この回答は機能しない可能性があります。

この愚かなことに何時間も費やした。私はこれを書き留めますので、あなたは書きません。

0
Ergec

ユーザー名とパスワードの大文字小文字を確認してください。

0

私はコマンドで試していました:

ALTER SYSTEM SET SEC_CASE_SENSITIVE_LOGON = FALSE;

しかし、それはうまくいきませんでした。 DBAタブのSQL Developerを使用して変更する必要がありました。

  1. パラメータ「sec_case_sensitive_logon」を見つけて、その値を「FALSE」に変更します enter image description here
  2. ボタンを使用して変更をコミットします: enter image description here
  3. それはコミット戦略を尋ね、あなたは両方を選択する必要があります: enter image description here
  4. 「適用」をクリックします
  5. この手順が必要かどうかはわかりませんが、ユーザーのパスワードも変更しました。 (同じパスワードを設定しました)

場合によっては、「初期化パラメーター」を開く方法がわかりません。

  1. 「Oracle SQL Developer」を開く
  2. 「表示」メニューから「DBA」を選択します
  3. 接続を選択してください
  4. そして「初期化パラメータ」をクリックします

enter image description here

0

私はまったく同じ問題を抱えていました。 SqlDeveloperから直接データベースに接続していたところ、問題なく動作していました。しかし、私のアプリケーション(VB6上に構築)はOracleへの接続に失敗し、エラー「ORA-01017無効なID /パスワード。
データベースIDの大文字と小文字を区別したログインをオフにすると、問題が解決しました。

0
rima ganguly