ユーザー名またはパスワードなしでのOracleへの接続
-
03-07-2019 - |
質問
Oracleには、Oracleに接続しているプログラムを実行しているオペレーティングシステムユーザーがデータベースユーザーを識別できるようにするという概念があります。 こちらを参照してください。
これにより、たとえばUNIXマシンのユーザーとして、次のようなコマンドを実行できます。
sqlplus /
ユーザー名またはパスワードなしで接続するOracle 10.2用のJavaプログラムを作成しようとしています。 urlの明らかな選択:
jdbc:oracle:thin:/@localhost:1521:MYDBSID
機能せず、エラーが発生します(現在、エラーはありません。)
これを行うために他の多くの形式も試みましたが、運がありません。
OS識別方法を使用してJavaプログラムをOracleに接続する方法について提案はありますか?
解決
JDBC Thinドライバーは、オペレーティングシステムから必要な情報を収集できない100%純粋なJava実装です。
JDBC OCIドライバーはこれを行うことができます! jdbc:oracle:oci8:/ @ MYDBSID
を使用します。サーバーにOracleドライバをインストールする必要があります。これがサーバーの場合は問題ありません(起動が速く、より多くの機能をサポートします) Thinドライバよりも))
他のヒント
oracleに同梱されているjdbcドライバには、指定したURLからOSユーザー名とパスワードを収集する機能がありません。 ORACLEにはサードパーティのJDBCドライバープロバイダーがあり、そのうちの1つがあなたが求めている機能を提供しているとします。 Googleで検索する必要があります。
回答いただいた方に感謝します。 OCIドライバーを使用しました。
Oracle 11gはシンドライバーを介したOSユーザー認証をサポートしている ことを示唆するドキュメントを見つけました:
これをテストするための11gのセットアップがないため、これが機能するかどうかはわかりません。
J2EEアプリサーバーからOracleにアクセスしている場合、JNDIを使用してデータソースを取得することで同様の目的を達成できます。
11gシンドライバーは、Kerberos認証を使用して接続できます。
フォローしてみてください jdbc:oracle:thin:username / password @ localhost:1521:MYDBSID
アカウント情報を指定する必要があります
sqlplus /オペレーティングシステムの認証を通過するUNIXマシン上のsysdbaとして
JDBC ThinドライバのOS認証サポートは11gで追加されました(OTNの11.2.0.4からJDBC Thinドライバをダウンロードできます)。
サーバー上で(TCPを介した)リモートOS認証を許可する必要があります。許可しない場合、ローカルでIPCまたはBEQを使用するsqlplusでのみ機能します。 init.oraファイルで、これを追加します。
REMOTE_OS_AUTHENT = TRUE
次に、ユーザーが「osuserdemo」の場合クライアントマシンで、次のようなデータベースユーザーを作成し、DBを再起動します。
CREATE USER OSUSERDEMO IDENTIFIED EXTERNALLY;
GRANT CONNECT,CREATE SESSION,RESOURCE TO OSUSERDEMO;
そして、JDBC Thinドライバは、ユーザー名またはパスワードなしで接続できる必要があります。
この機能(非常に安全ではないと見なされる)が12cでサポートされなくなったことは注目に値します。
jdbc:oracle:oci:@
はojdbc6.jarおよびOracle 11g2で動作します