2025年8月15日金曜日

SQLclのMCPサーバーのデータベース接続にTOKEN_AUTH=AZURE_INTERACTIVEの設定を使用する

更新: 2026年2月12日 - SQLclの-homeオプションを使用

本記事では、SQLclのMCPサーバーからデータベースに接続する際に、Entra IDとの対話型のユーザー認証を行うように構成します(TOKEN_AUTH=AZURE_INTERACTIVE)。

Claude Desktopでは以下のように、MCPサーバーがデータベースに接続するときにブラウがが開いて、ユーザー認証を要求します。


記事「SQLclのMCPサーバーのデータベース接続をMicrosoft Entra IDのOAuth2で認証する」に沿って、Autonomous DatabaseとしてSALESADB、Entra IDにアプリケーションとしてSALESADBが作成されていることを前提とします。

Microsoft Entra IDの設定


Albert Balbekovさんの以下の記事に沿った作業を実施します。

Azure AD (Entra ID) Tokens: 1. Entra ID App Registrations
Register Client in Entra ID


クライアントとなるアプリケーションを作成します。

アプリの登録を開き、新規作成を実行します。


作成するアプリケーションの名前SALESADB-CLIとします。サポートされているアカウントの種類この組織ディレクトリのみに含まれるアカウント (既定のディレクトリ のみ - シングル テナント)を選択します。

リダイレクトURIのタイプとしてパブリック クライアント/ネィティブ(モバイルとデスクトップ)を選択し、リダイレクトURIとしてhttp://localhostを設定します。

以上でアプリケーションを登録します。


アプリケーションSALESADB-CLIが作成されます。

後で参照するため、アプリケーション(クライアント)IDをコピーして保存します。その後に、リダイレクトURIの設定を開き、パブリッククライアントフローの設定を確認します。


設定を開きます。


設定を開くとパブリッククライアントフローを許可するという設定があります。デフォルトでは無効になっています。

この設定を有効に切り替えて、保存します。


アプリの登録に戻り、データベースSALESADBに紐づけられているアプリケーションSALESADBを開きます。


APIの公開を開き、クライアントアプリケーションの追加を実行します。


クライアントID
に先ほどコピーしたアプリケーションSALESADB-CLIアプリケーション(クライアント)IDを設定します。

承認済みのスコープチェックし、アプリケーションの追加をクリックします。


承認済みのクライアント・アプリケーションとしてSALESADB-CLIが追加されます。


以上でEntra IDの設定は完了です。


SQLclの構成



記事「Claude DesktopにSQLclのMCPサーバーを組み込む」にそって、SQLclがインストール済みとします。また、~/Documents/mcp-salesadb-entraidを環境変数TNS_ADMINの宛先となるように構成済みとします。

Entra IDによる認証に必要なライブラリを導入します。SQLclを起動します。

sql /nolog

~ % sql /nolog


SQLcl: 木 2月 12 10:47:14 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


SQL>


SDKのインストール状況を確認します。

sdk list

SQL> sdk list

+------------+-----------+---------+----------------------------------------------------------------------+

| SDK        | INSTALLED | VERSION | ドキュメント                                                               |

+------------+-----------+---------+----------------------------------------------------------------------+

| jdbc-oci   | いいえ       | 1.0.6   | https://docs.oracle.com/en/database/oracle/oracle-database/23/jjdbc/ |

| jdbc-azure | いいえ       | 1.0.6   | https://docs.oracle.com/en/database/oracle/oracle-database/23/jjdbc/ |

+------------+-----------+---------+----------------------------------------------------------------------+

SQL> 


jdbc-azureがインストールされていなければ、インストールします。

sdk install jdbc-azure

SQL> sdk install jdbc-azure

ojdbc-provider-azure SDKおよびその依存性をダウンロードしています

jdbc-azure SDKは正常にインストールされました。SQLclを再起動して変更を反映してください

SQL> 


一旦SQLclを終了し、再度起動します。

exit
sql /nolog

SQL> exit

~ % sql /nolog


SQLcl: 木 2月 12 10:55:16 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


SQL> 


jdbc-azureのSDKが正常にインストールされたことを確認します。

sdk list

SQL> sdk list

+------------+-----------+---------+----------------------------------------------------------------------+

| SDK        | INSTALLED | VERSION | ドキュメント                                                               |

+------------+-----------+---------+----------------------------------------------------------------------+

| jdbc-oci   | いいえ       | 1.0.6   | https://docs.oracle.com/en/database/oracle/oracle-database/23/jjdbc/ |

| jdbc-azure | はい        | 1.0.6   | https://docs.oracle.com/en/database/oracle/oracle-database/23/jjdbc/ |

+------------+-----------+---------+----------------------------------------------------------------------+

SQL> 


SQLclの構成は以上で完了です。


TOKEN_AUTH=AZURE_DEVICE_CODEでの接続



今までの設定でデータベースに接続できるか確認するため、管理者ユーザーADMINSALESADBに接続します。

export TNS_ADMIN=~/Documents/mcp-salesadb-entraid
sql admin@salesadb_low

~ % export TNS_ADMIN=~/Documents/mcp-salesadb-entraid

~ % sql admin@salesadb_low


SQLcl: 木 2月 12 11:19:41 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


パスワード (**********?) ****************

Last Successful login time: 木 2月  12 2026 11:19:48 +09:00


接続先:

Oracle AI Database 26ai Enterprise Edition Release 23.26.1.1.0 - for Oracle Cloud and Engineered Systems

Version 23.26.1.1.0


SQL> exit

Oracle AI Database 26ai Enterprise Edition Release 23.26.1.1.0 - for Oracle Cloud and Engineered Systems

Version 23.26.1.1.0から切断されました

~ % 


データベースSALESADBに接続できました。

TOKEN_AUTH=AZURE_DEVICE_CODEを指定する際に必要なTENANT_IDCLIENT_IDAZURE_DB_APP_ID_URIの値を、Entra IDの画面から取得します。

アプリケーションSALESADB概要を開き、アプリケーションIDのURIの値をコピーします。この値をAZURE_DB_APP_ID_URIとして設定します。


アプリケーションSALESADB-CLI概要を開き、アプリケーション(クライアント)IDの値をコピーします。この値をCLIENT_IDとして設定します。次にディレクトリ(テナント)IDの値をコピーします。この値をTENANT_IDとして設定します。


$TNS_ADMIN/tnsnames.oraTOKEN_AUTHTENANT_IDCLIENT_IDAZURE_DB_APP_ID_URIの指定を加えた、以下のようなエントリSALESADB_AZCODEを追加します。
salesadb_azcode = (
    description= (retry_count=20)(retry_delay=3)
    (address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))
    (connect_data=(service_name=************_salesadb_low.adb.oraclecloud.com))
    (security=(ssl_server_dn_match=yes)(TOKEN_AUTH=AZURE_DEVICE_CODE)
        (TENANT_ID=3940****-****-****-****-********2758)
        (CLIENT_ID=370e****-****-****-****-********30d7)
        (AZURE_DB_APP_ID_URI=api://70ec****-****-****-****-********2b4a))
)
追加したTNS名SALESADB_AZCODEを使って、データベースSALESADBに接続します。

sql /@salesadb_azcode

~ % sql /@salesadb_azcode      


SQLcl: 木 2月 12 14:24:10 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code OPD2HQU5X to authenticate.


ブラウザでhttps://microsoft.com/deviceloginを開き、表示されているコードを入力します。

次へ進みます。


Entra IDに登録されたユーザーでサインインします。以下のスクリーンショットは、すでにサインインしているため、サインイン済みのユーザーを選択しています。


アプリケーションSALESADB-CLIにサインインします。

続行をクリックします。


アプリケーションSALESADB-CLIにサインインできました。


SCLclでは、データベースへの接続が完了しています。

 ~ % sql /@salesadb_azcode      


SQLcl: 木 2月 12 14:24:10 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


To sign in, use a web browser to open the page https://microsoft.com/devicelogin and enter the code OPD2HQU5X to authenticate.

接続先:

Oracle AI Database 26ai Enterprise Edition Release 23.26.1.1.0 - for Oracle Cloud and Engineered Systems

Version 23.26.1.1.0


SQL>


以下のSELECT文を実行し、接続ユーザーを確認します。
select
    sys_context('userenv','session_user') as session_user,
    sys_context('userenv','current_user') as current_user,
    sys_context('userenv','authenticated_identity') as azure_user
from dual;

SQL> select

  2      sys_context('userenv','session_user') as session_user,

  3      sys_context('userenv','current_user') as current_user,

  4      sys_context('userenv','authenticated_identity') as azure_user

  5* from dual;


SESSION_USER    CURRENT_USER    AZURE_USER                                                    

_______________ _______________ _____________________________________________________________ 

MCPUSER         MCPUSER         yuji._______outlook.com_EXT_@___________outlook.onmicrosoft.com    


SQL> exit

Oracle AI Database 26ai Enterprise Edition Release 23.26.1.1.0 - for Oracle Cloud and Engineered Systems

Version 23.26.1.1.0から切断されました

~ % 


システム・コンテキストUSERENVAUTHENTICATED_IDENTITYに、Entra IDでのupnの値が設定されていることが確認できます。

以上で、TOKEN_AUTH=AZURE_DEVICE_CODEでの認証を確認できました。


TOKEN_AUTH=AZURE_INTERACTIVEでの接続



$TNS_ADMIN/tnsnames.oraにエントリSALESADB_AZCODETOKEN_AUTHAZURE_INTERACTIVEに変更したエントリSALESADB_AZINTを作成します。
salesadb_azint = (
    description= (retry_count=20)(retry_delay=3)
    (address=(protocol=tcps)(port=1522)(host=adb.us-ashburn-1.oraclecloud.com))
    (connect_data=(service_name=************_salesadb_low.adb.oraclecloud.com))
    (security=(ssl_server_dn_match=yes)(TOKEN_AUTH=AZURE_INTERACTIVE)
        (TENANT_ID=3940****-****-****-****-********2758)
        (CLIENT_ID=370e****-****-****-****-********30d7)
        (AZURE_DB_APP_ID_URI=api://70ec****-****-****-****-********2b4a))
)
追加したTNS名SALESADB_AZINTを使って、データベースSALESADBに接続します。

sql /@salesadb_azint

azure % sql /@salesadb_azint



SQLcl: 金 8月 15 15:58:45 2025のリリース25.2 Production


Copyright (c) 1982, 2025, Oracle.  All rights reserved.



ブラウザが起動してユーザーのサインインを求められるところまでは進むのですが、そこから先に進めません。


AZURE_DEVICE_CODEではユーザー認証できるため、Entra IDおよびデータベースの設定に不備はないはずです。

調べたところ、AZURE_INTERACTIVEでブラウザが開かれた時のURLは以下で始まります。

https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize?scope=openid+

このorganizationsの指定が曖昧なため、サインインに失敗する模様です。organizationsの部分を、URLを直接編集してテナントIDに置き換えます。

置き換えた後にEnterを入力してページを更新します。


ページの表示は変わりませんが、URLは変更されています。先ほどのEnterの入力時は、HTTPのGETリクエストが発行されてページが更新されています。

今度はユーザーを選択し、変更したURLにPOSTリクエストを発行します。これがユーザー認証のリクエストになります。


Authentication complete. You can close the browser and return to the application.と表示されます。


SQLclを確認すると、データベースへの接続が確立されています。

AZURE_DEVICE_CODEのときと同様のSELECT文を実行し、AUTHENTICATED_IDENTITYを確認します。

Entra IDのユーザーで認証されていることが確認できます。

SQL> select

  2      sys_context('userenv','session_user') as session_user,

  3      sys_context('userenv','current_user') as current_user,

  4      sys_context('userenv','authenticated_identity') as azure_user

  5* from dual;


SESSION_USER    CURRENT_USER    AZURE_USER                                                    

_______________ _______________ _____________________________________________________________ 

MCPUSER         MCPUSER         yuji.________outlook.com_EXT_@_________kksoutlook.onmicrosoft.com    


SQL> 


あまり実用的でないワークアラウンドですが、かろうじてTOKEN_AUTH=AZURE_INTERACTIVEでの接続が確認できました。


MCPサーバーの確認



TOKEN_AUTH=AZURE_INTERACTIVEでの接続を、MCPサーバーで使用できるように保存します。

保存する名前はsalesadb-azとします。-homeに$TNS_ADMINを指定し、SQLclの接続情報の保存先を、デフォルトのディレクトリから変更します。

sql -home $TNS_ADMIN /nolog
conn -save salesadb-az -savepwd /@salesadb_azint

~ % sql -home $TNS_ADMIN /nolog


SQLcl: 木 2月 12 14:08:24 2026のリリース25.4 Production


Copyright (c) 1982, 2026, Oracle.  All rights reserved.


SQL> conn -save salesadb-az -savepwd /@salesadb_azint

名前: salesadb-az

接続文字列: salesadb_azint

ユーザー: 

パスワード: 未保存

接続しました.

SQL> 


connmgr listを実行し、接続salesadb-azが保存されていることを確認します。

SQL> connmgr list

.

├── salesadb

└── salesadb-az

SQL> exit

Oracle AI Database 26ai Enterprise Edition Release 23.26.1.1.0 - for Oracle Cloud and Engineered Systems

Version 23.26.1.1.0から切断されました

~ % 


Claude Desktopに組み込んだMCPサーバーには、すでに-homeオプションと環境変数TNS_ADMINが設定済みです。

Claude Desktopからsalesadb-azに接続します。

ユーザー認証が必要なときは、ブラウザが開きます。前の章で紹介したURLのorganizationsテナントIDに変更すると、ユーザー認証に成功します。

ユーザー認証に成功すると、Claude Desktopからデータベースにアクセスできるようになります。


きちんと使用するにはあと少し足りませんが、データベース・ユーザーではなくEntra IDに個人として登録したユーザーによって、オラクル・データベースにアクセスできるようになりました。

Oracle Databaseには仮想プライベート・データベースやReal Application Securityといった、認識した個人ごとにデータベースへのアクセスを制限する機能があります。また、Unified Auditingでは監査レコードにAUTHENTICATED_IDENTITYの値を記録することもできます。

今回の記事は以上になります。