問題タブ [ora-01017]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - sqlplus 12.1 での ORA-01017 エラー、他のアプリケーションで同じ資格情報を使用して接続できます
Fedora 19 に SQL*Plus 12.1 をインストールして、Oracle 11g データベースに接続しようとしています。ここから Instantclient RPM パッケージ (basic、devel、sqlplus) をインストールしました。SQL*Plus を使用して他の Oracle データベースに正常に接続できるので、ソフトウェアが正常にインストールされていることがわかります。ただし、この特定のデータベースに接続しようとすると、次のエラーが発生します。
これが私の tnsnames.ora ファイルです(ホストとポートは難読化されています):
私の TNS_ADMIN 環境変数は、私の tnsnames.ora ファイルのパスに設定されています。
接続するために実行しているコマンド:
Enterキーを押した後、ORA-01017エラーが発生する前に、バージョンと著作権情報で約2〜3秒間ハングします。
データベースに正常に接続する別のアプリケーションからコピーして貼り付けたので、ユーザー名とパスワードを正しく入力したことはわかっています。
編集
log.xml ファイル ( 内C:\oracle\product\11.2.0\diag\tnslsnr\test\listener\alert\log.xml
) を調べたところ、正しいリスナーと話していることを示すエントリがいくつかあることがわかりました。ログ エントリの例を次に示しますが、機密情報の可能性があるため難読化されています。
また、 tnsnames.ora ファイルの *SERVICE_NAME* 要素をSIDに変更しようとしましたが、違いはありませんでした。
パスワードを引用符で囲んでも、問題は解決しませんでした。
バージョンに問題がある可能性はありますか?InstantClient と sqlplus バージョン 12.1 を使用していますが、データベースはバージョン 11.2 です。
編集 2
さて、公式です。私はばかです、そしてそれがエラーの原因です。間違ったパスワードを入力していました。コピーして貼り付けていたものも間違っていたと思います。
c# - Oracle.ManagedDataAccess および ORA-01017: ユーザー名/パスワードが無効です。ログオンが拒否されました
サーバーの 1 つで困難な状況に陥っています。Oracle 12c データベースに接続する必要がある ASP.NET MVC 3 アプリケーションがあります。これは、次の接続文字列を使用して行われます。
また、Oracle の Oracle.ManagedDataAccess バージョン 4.121.1.0 も使用しています。接続を試行するたびに、次のエラーが発生します。
上記の資格情報を使用して、デスクトップに正常に接続できます。別のサーバーに同じコードがありますが、管理されていない古いバージョンのライブラリを使用しており、前述の資格情報で正常に接続できます。ただし、コードを実行したいサーバーは、異なるサーバーでの接続を成功させる同じ資格情報を使用して毎回失敗します。
失敗したサーバーでは、次のことができます。
- SQLPLUS経由で接続
- TNSPING でデータベースにアクセスする
- システム DSN を作成して ODBC 接続を確立する
すべての場所で TNSNAMES.ORA を確認しましたが、正しいようです。
データベースに何度もアクセスした後、アカウントは実際にロックされ、実際にデータベースにアクセスしたこと、およびデータベースが提示された資格情報を気に入らなかったことが示されました。以前に正常に接続されたアプリケーションを確認したところ、アカウントがロックされていることを示すエラーで失敗しました。アカウントのロックを解除すると、問題が発生しているサーバーを除いて、これらのアプリケーションが正常に接続されました。
私は途方に暮れています。
この問題の原因について他に何か提案はありますか?
編集:
ローカル コンピューターと問題のあるサーバーに WireShark をインストールしました。デスクトップとデータベース、および問題のサーバーとデータベースの間の通信をキャプチャしました。私のデスクトップがパスワードを伝えていることがわかりました:
一方、私が問題を抱えているサーバーはそうではありませんでした(または少なくともそれが仮定です):
パスワードが接続文字列に存在する場合でも、パスワードが送信されないようにするセキュリティ/構成設定を知っている人はいますか?
編集 (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; を実行する必要があります。次に、すべてのパスワードをリセットします。