VS CodeおよびKerberos Authを使用したOracleへの接続 (2025/04/25)
VS CodeおよびKerberos Authを使用したOracleへの接続 (2025/04/25)
https://www.thatjeffsmith.com/archive/2025/04/connecting-to-oracle-using-vs-code-kerberos-auth/
免責事項その1:私は「Kerberosの専門家」ではありませんし、他の方々の研究成果を共有しているにすぎません。しかしながら、仕組みを説明し、これを動作させるために必要なシステム構成を実演することはできます。
免責事項その2:この記事は、データベース接続を行うデータベースユーザーの認証にKerberosが使用できるようにOracleデータベースを既に正常に構成済みであることを前提としています。まだそこまで進んでいない場合は、こちらのドキュメントを参照することをお勧めします。
しかし、SQL*Plusでは動作します…!
SQLPlusで動作しているなんて素晴らしいですね。つまり、データベースのKerberos認証設定が正常に完了したということですね。
しかし、これは現時点でSQLclやVS Codeに接続できるという意味ではありません。当社のデータベースツールは、フルスタック(SQLcl、ORDS、SQL Developer)またはバックエンド(SQL Developer Web、SQL Developer for VS Code、Oracle Cloud Infrastructureの各種ソリューションおよび機能)のいずれかで、一般的にJavaで開発されています。
つまり、私たちのツールがデータベースと連携するには、JDBCドライバを介して処理が行われることになります。そのため、必要なKerberos情報がすべて含まれるようにJDBC接続を設定する必要があります。
両面仕様のJDBCコイン
- Thin
- Thick こと Oracle JDBC OCI
「JDBC Thin」とは、Javaアプリケーション内のJDBCドライバと関連ライブラリ(JARファイル)から得られるものだけがスタックとして使用されることを意味します。
ここでの利点は、すべてが自己完結型であり、データベース機能を使用するために追加のライブラリが一切必要ないことです。
「JDBC Thick」とは、JDBCドライバが提供する機能を補完するために、ORACLE_HOMEまたはOracleクライアントのインストール(フルインストールまたはインスタントインストール)に含まれるリソースも利用することを意味します。これは正式にはJDBC Oracle Call Interface(OCI)ドライバと呼ばれます。
メリットは明らかで、機能が増えることだが、デメリットは以下の通りだ。
- その他の依存関係、パッケージング、セットアップ、構成
- バージョン競合 – ドライバーは異なるバージョンのクライアントとの連携を好まない。場合によっては、23.6と23.7のようなマイナーバージョンの差分でも問題が発生する。
つまり、こういうことなんです…
KerberosはJDBC Thinでも問題なく使用できます。クライアントは不要です!
実際、当社のVS Code拡張機能はJDBC Thinのみに対応しています。最新の23ai JDBCドライバを使用しており、このドライバにはデータベースのすべての機能が含まれているため、Thick Client派が主張する「機能が多い」という論拠は完全に否定されます。
もう見せてくれよ!
私はKerberosの専門家ではないので、通常は他の人が書いた、その方法を示すブログ記事を紹介するか、JavaアプリケーションでKerberosを設定する例が記載されているJDBCドキュメントを渡すようにしています。
要約すると、使用されている接続JDBC URLの例と、設定されている接続プロパティを確認することをお勧めします。
これら2つの情報の組み合わせにより、従来のOracle Home/Client構成で定義されていた情報(SQL*Plusで動作させるために使用していた情報)と同じ情報がデータベースに提供されます。

それでは、SQL Developer拡張機能を使ってVS Codeでこのシステムを再現する方法を見ていきましょう。
新しい接続を作成します。タイプ: カスタムJDBC

ここで注意すべきもう1つの点は、ユーザー名が「/」に設定されていることです。これは基本的にデータベースに対して、「ああ、オペレーティングシステムがそれを処理してくれるだろう」と伝えているのです。
しかし、これで終わりではありません。先ほど述べた厄介な「setProperty」の項目を考慮に入れる必要がありますし、Javaコードをいじっていただくつもりもありません。むしろ、Javaコードをいじらないようにお願いします。
代わりに、詳細接続パネルをご用意しましたので、そこでこれらの設定を定義できます。
ここをクリックして、フォームに必要事項を入力してください。フォームは以下のようになります。

これで完了です。準備は万端です。接続テストボタンを使って、接続が成功したことを確認してください。
では、SQLclはどうでしょうか?
SQLclを単独で実行した場合、OracleクライアントがJDBCドライバと互換性があれば、JDBC Thick接続に対応できますが、SQLclやクライアントをアップグレードした後でも常に「動作」するように、Thinドライバを設定することを再度お勧めします。
SQLclでは、接続文字列自体にすべての情報を記述できます。それでは、その仕組みを詳しく見ていきましょう。

sql -thin -kerberos -krb5_config C:\path\to\krb5.conf -krb5ccname C:\path\to\credentialCache /@ezconnect-string -thin : SQLcl に Thin ドライバを使用するように指示します
-kerberos : 認証に Kerberos モードを使用します
-krb5_config : SQL にローカル Kerberos 構成情報を見つける場所を指示します
-krb5ccname : Kerberos 資格情報キャッシュの場所を指定します
接続文字列にはユーザー名やパスワードは指定していません。SQLclは構成設定と接続先のデータベースを認識し、Kerberos認証によって処理します。
Kerberos固有の設定についてサポートが必要な場合は…
My Oracle Support にサービスリクエストを送信してください。弊社のデータベースツールサポートチームには、Kerberos を日常的に扱っており、社内で使用できる Kerberos 環境を所有している担当者が数名います。一方、私はそのような環境を所有していません。
My Oracle Support契約をお持ちでない場合は、フォーラム( SQL Developer | SQLcl | VS Code )を通じてコミュニティからサポートを受けることができます。
まとめ
はい、弊社のVS Code拡張機能およびSQLclを含むその他のすべてのツールでは、SQLPlusやOracleクライアントをセットアップすることなく、Kerberosを使用できます。


コメント
コメントを投稿