更新: 2026年2月10日 - コンテナによる分離の代わりにSQLclの-homeオプションを使用
SQLclが提供しているMCPサーバーがデータベースに接続する際に、Microsoft Entra IDに登録しているユーザーで認証します。ユーザー認証にはOAuth2.0のアクセストークンを使用します。
本記事ではMCPサーバーの接続先となるデータベースにAlways FreeのAutonomous AI Databaseを使用します。Microsoft Entra IDが発行するトークンを使うユーザー認証では、データベースのクライアントとサーバー間がTransport Layer Security(TLS)で暗号化されていることが必須です。Autonomous AI DatabaseではTLSによる暗号化は構成済みです。
本記事では、主に以下のドキュメントにそって作業を実施します。
Using Oracle Autonomous AI Database Serverless
およびMediumの以下の記事:
実際は上記のドキュメントを読み込んで作業を進めたというよりは、ほとんどChatGPTやClaudeに聞いて作業を進めています。本当に色々と教えてくれます。
以下より、表題の件の実装について記述します。
Autonomous AI Databaseの作成
Oracle Cloudのコンソールより、Always FreeのAutonomous AI Databaseを作成します。
表示名はSALESADB、データベース名もSALESADBとします。ワークロード・タイプにレイクハウスを選択します。データベース構成のAlways Freeをオンにし、データベース・バージョンとして26aiを選択します。
その他、管理者ユーザーADMINのパスワードなどを設定し、Autonomous AI Databaseを作成します。
作成をクリックすると、データベースのプロビジョニングが開始します。
データベースが使用可能になったことを確認し、手元のクライアントからデータベースに接続するために使用するウォレットをダウンロードします。
データベース接続をクリックします。
SQLclのMCPサーバーの構成については、以下の記事で紹介しています。
Claude DesktopにSQLclのMCPサーバーを組み込む
この記事の手順にそって、TNS_ADMINとして設定するディレクトリを~/Documents/mcp-salesadb-entraidとして作成し、その下にウォレットを解凍します。
環境変数TNS_ADMINを設定し、作成したAutonomous AI Database - SALESADBに管理者ユーザーADMINで接続します。接続にはSQLclを使用します。
export TNS_ADMIN=~/Documents/mcp-salesadb-entraid
sql -home $TNS_ADMIN admin@salesadb_low
~ % export TNS_ADMIN=~/Documents/mcp-salesadb-entraid
~ % sql -home $TNS_ADMIN admin@salesadb_low
SQLcl: 火 2月 10 14:46:06 2026のリリース25.4 Production
Copyright (c) 1982, 2026, Oracle. All rights reserved.
パスワード (**********?) ****************
Last Successful login time: 火 2月 10 2026 14:46:18 +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から切断されました
~ %
以上で、これからの作業に使用するAutonomous Databaseが作成できました。
Microsoft Entra IDの設定
Microsoft Entra IDの設定を行います。
Entra IDでは、接続先となるデータベースをアプリケーションとして作成します。
AzureのコンソールのMicrosoft Entra IDのページよりアプリの登録を開き、新規作成を実行します。
名前はSALESADBとします。サポートされているアカウントの種類に、この組織ディレクトリのみに含まれるアカウント(規程のディレクトリのみ - シングルテナント)を選択します。
Entra IDに登録されたユーザーでユーザー認証ができる最低限の設定を行なっています。
リダイレクトURIは省略します。
以上でアプリケーションSALESADBを登録します。
アプリケーション
SALESADBが作成されます。
APIの公開を開きます。
アプリケーションIDのURIを追加します。追加のリンクをクリックします。
アプリケーションIDのURIとしてデフォルト値の
api://アプリケーションIDが表示されます。
本記事ではEntra ID v2アクセストークンを生成するように構成するため、アプリケーションIDのURIはデフォルトのまま設定します。
保存をクリックします。
アプリケーションID URIが追加されます。
続けてScopeの追加を実施します。
スコープ名はsession:scope:connectとしています。スコープ名は自由に設定できます。
同意できるのはだれですか?として管理者とユーザーを選択します。
管理者の同意の表示名、管理者の同意の説明、ユーザーの同意の表示名、ユーザーの同意の説明には、Connect to SALESADBを入力します。
状態を有効にして、スコープの追加をクリックします。
以上で
アプリの公開に、
アプリケーションID URLと
スコープが登録できました。
アプリロールを開き、
アプリロールの作成をクリックします。
この作業で作成するアプリロールを、Oracle Databaseのデータベース・ユーザーにAZURE_ROLEとして割り当てることにより、Entra IDでユーザー認証ができるようになります。(この他にAZURE_USERをデータベース・ユーザーに割り当てる方法もあります)。
表示名はUser Role for MCPとします。この名前はEntra ID側の操作で使用されます。許可されたメンバーの種類は両方(ユーザー/グループ+アプリケーション)を選択します。
値にMCPUSER_ROLEを設定します。Oracle DatabaseがAZURE_ROLEとして認識するのは、このMCPUSER_ROLEです。
説明はUser Role for MCP、このアプリロールを有効にしますか?にチェックを入れます。
以上で適用をクリックします。
アプリロールMCPUSER_ROLEが作成されます。
アプリケーション
SALESADBにEntra IDのユーザーを割り当てます。割り当てるユーザーに、作成したアプリロール
MCPUSER_ROLEを割り当てます。
ユーザーの割り当ては、エンタープライズアプリケーションに移動して実施します。
ユーザーとグループの割り当てを開きます。
ユーザーまたはグループの追加をクリックします。
ユーザーの
選択されていませんをクリックし、割り当てるユーザーを選択します。
割り当てるユーザーを選択し、
選択をクリックします。
割り当てをクリックします。
エンタープライズアプリケーションSALESADBに、アプリロールMCPUSER_ROLEを持つユーザーが割り当てられました。
ここで割り当てられたユーザーで、データベース接続のユーザー認証が行われます。
Entra IDのトップページに戻り、アプリの登録を開きます。
すべてのアプリケーションを表示し、その中のSALESADBを開きます。
APIのアクセス許可を開き、アクセス許可の追加をクリックします。
所属する組織で使用しているAPIを開き、
SALESADBを探して
選択します。
アプリケーションの許可を選択します。
選択できるアクセス許可としてアプリロールMCPUSER_ROLEが表示されます。このMCPUSER_ROLEをチェックして、アクセス許可の追加をクリックします。
以上でアプリケーションSALESADBによって、アプリロールMCPUSER_ROLEへのアクセスを許可できるようになりました。
アクセス許可の追加を再度クリックし、先ほどと同様に所属する組織で使用しているAPIを開き、SALESADBを選択します。
今度はアプリケーションに必要なアクセス許可の種類の委任されたアクセス許可を選択します。アクセス許可として表示されたsession:scope:connectをチェックして、アクセス許可の追加を実行します。
以上でアクセス許可の設定ができました。
Entra IDのアクセストークンをデフォルトのv1からv2に変更します。
マニュフェストを開きます。
マニュフェストに
accessTokenAcceptedVersionの設定を追加します。
Microsoft Graphアプリマニュフェストであれば"api"の下に属性requestedAccessTokenVersionがあります。この値を2に変更します。
"requestedAccessTokenVersion": 2,AAD Graph アプリマニュフェストであれば、トップレベルに属性性"accessTokenAcceptedVersion"があります。この値を2に変更します。
"accessTokenAcceptedVersion": 2,
追加後、保存します。
Entra ID v2アクセストークンでは、ユーザーの識別子となるclaimとしてupnを使用します。
トークン構成を開き、オプションの要求の追加をクリックします。
トークンの種類にアクセスを選択し、要求に含まれるupnをチェックします。これはOAuth2.0のアクセストークンにclaimとしてupnを追加する、という作業です。
以上で追加をクリックします。
Microsoft Graph profileのアクセス許可を有効にしますをチェックして、追加します。
必ずしも必要ではないようですが、念の為同様の操作を行い、
IDトークンについてもclaimとして
upnを
追加します。
以上でIDトークンとアクセストークンの両方に属性としてupnが含まれるようになりました。
属性upnに設定される値を調整します。要求upnの3点メニューをクリックし、編集を実行します。

UPNの編集画面で、外部認証済みをはい、ハッシュ記号の置換をはいに設定します。
以上で保存します。
同じ作業をIDトークンとアクセストークンの両方で実施します。
以上でMicrosoft Entra IDでの作業は完了です。
Oracle Databaseの構成
Entra IDのアプリケーションSALESADBの概要より、アプリケーション(クライアント)ID,ディレクトリ(テナント)ID、アプリケーションIDのURLの3つの値をコピーして保存します。
Autonomous DatabaseのSALESADBに管理者ユーザーADMINで接続し、DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATIONを実行します。
begin
dbms_cloud_admin.enable_external_authentication(
type => 'AZURE_AD',
params => json_object(
'tenant_id' value 'ディレクトリ(テナント)ID',
'application_id' value 'アプリケーション(クライアント)ID',
'application_id_uri' value 'アプリケーションIDのURL'
),
force => true
);
end;
/
~ % sql -home $TNS_ADMIN admin@salesadb_low
SQLcl: 火 2月 10 15:04:59 2026のリリース25.4 Production
Copyright (c) 1982, 2026, Oracle. All rights reserved.
パスワード (**********?) ****************
Last Successful login time: 火 2月 10 2026 15:05:10 +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> begin
2 dbms_cloud_admin.enable_external_authentication(
3 type => 'AZURE_AD',
4 params => json_object(
5 'tenant_id' value '3940****-****-****-****-********2758',
6 'application_id' value '70ec****-****-****-****-********2b4a',
7 'application_id_uri' value 'api://70ec****-****-****-****-********2b4a'
8 ),
9 force => true
10 );
11 end;
12* /
PL/SQLプロシージャが正常に完了しました。
SQL>
設定を確認します。
select name, value from v$parameter where name = 'identity_provider_type';
SQL> select name, value from v$parameter where name = 'identity_provider_type';
NAME VALUE
_________________________ ___________
identity_provider_type AZURE_AD
SQL>
Entra IDで作成したアプリロールMCPUSER_ROLEをマップしたデータベース・ユーザーとしてMCPUSERを作成します。
create user mcpuser identified globally as 'AZURE_ROLE=MCPUSER_ROLE';
alter user mcpuser quota 25m on data;grant create table, create view, create sequence, create synonym to mcpuser;
grant create session to mcpuser;
SQL> create user mcpuser identified globally as 'AZURE_ROLE=MCPUSER_ROLE';
User MCPUSERは作成されました。
SQL> alter user mcpuser quota 25m on data ;
User MCPUSERが変更されました。
QL> grant create table, create view, create sequence, create synonym to mcpuser;
Grantが正常に実行されました。
SQL> grant create session to mcpuser;
Grantが正常に実行されました。
SQL>
Entra IDのアクセストークンを受け付けるユーザーMCPUSERは、トークンを検証するために以下のURLにアクセスする必要があります。
https://login.windows.net/common/discovery/keys
そのため、データベース・ユーザーMCPUSERにネットワークACLを追加します。
begin
dbms_network_acl_admin.append_host_ace(
host => '*',
ace => xs$ace_type(
privilege_list => xs$name_list('connect'),
principal_name => 'MCPUSER',
principal_type => xs_acl.ptype_db
)
);
end;
/
SQL> begin
2 dbms_network_acl_admin.append_host_ace(
3 host => '*',
4 ace => xs$ace_type(
5 privilege_list => xs$name_list('connect'),
6 principal_name => 'MCPUSER',
7 principal_type => xs_acl.ptype_db
8 )
9 );
10 end;
11* /
PL/SQLプロシージャが正常に完了しました。
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から切断されました
~ %
以上でOracle Databaseの構成は完了です。
接続情報の更新
接続文字列が記載されている$TNS_ADMIN/tnsnames.oraを開き、トークンで認証するTNS名salesadb_tokenを追加します。salesadb_lowに以下の設定を加えます。
(TOKEN_AUTH=OAUTH)(TOKEN_LOCATION=/Users/[ユーザー名]/Documents/mcp-salesadb-entraid/token.txt)
salesadb_token = (
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=OAUTH)
(TOKEN_LOCATION=/Users/___________/Documents/mcp-salesadb-entraid/token.txt))
)
Entra IDにログインします。OAuth2の認証トークンを生成し、ファイル/Users/[ユーザー名]/Documents/mcp-salesadb-entraid/token.txtに書き込みます。
az loginコマンドを実行します。
az login --tenant "テナントID" --scope "api://アプリケーションIDのURI/session:scope:connect"~ % az login --tenant "3940****-****-****-****-********2758" --scope "api://70ec****-****-****-****-********2b4a/session:scope:connect"
A web browser has been opened at https://login.microsoftonline.com/3940****-****-****-****-********2758/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.
ブラウザが開き、Entra IDへのサインインを求められます。
サインインするアカウントを入力します。すでにサインインした履歴がある場合は、アカウントの選択を求められます。
次へ進みます。
MFAの構成などにより、ユーザー認証の手続きは異なります。以下はMicrosoft Authenticatorを使用した認証です。
Authenticatorアプリの確認を求められます。
許可されたアプリの許可を求められます。次へをクリックします。
同様の確認を求められるので、(内容を理解したうえで)
承諾します。

続行をクリックし、サインインを完了します。
以上でサインインが完了します。
az loginを実行している画面でAzureのサブスクリプションの選択を求められます。サブスクリプションが1つだけだったので、Enterを入力しました。
Select a subscription and tenant (Type a number or Enter for no changes):
~ % az login --tenant "3940****-****-****-****-********2758" --scope "api://70ec****-****-****-****-********2b4a/session:scope:connect"
A web browser has been opened at https://login.microsoftonline.com/3940****-****-****-****-********2758/oauth2/v2.0/authorize. Please continue the login in the web browser. If no web browser is available or if the web browser fails to open, use device code flow with `az login --use-device-code`.
Retrieving subscriptions for the selection...
[Tenant and subscription selection]
No Subscription name Subscription ID Tenant
----- -------------------- ------------------------------------ ------------------------------------
[1] * Azure subscription 1 7ada****-****-****-****-********7b71 3940****-****-****-****-********2758
The default is marked with an *; the default tenant is '3940****-****-****-****-********2758' and subscription is 'Azure subscription 1' (7ada****-****-****-****-********7b71).
Select a subscription and tenant (Type a number or Enter for no changes):
Tenant: 3940****-****-****-****-********2758
Subscription: Azure subscription 1 (7ada****-****-****-****-********7b71)
[Announcements]
With the new Azure CLI login experience, you can select the subscription you want to use more easily. Learn more about it and its configuration at https://go.microsoft.com/fwlink/?linkid=2271236
If you encounter any problem, please open an issue at https://aka.ms/azclibug
[Warning] The login output has been updated. Please be aware that it no longer displays the full list of available subscriptions by default.
~ %
以上で、Entra IDにサインインしてIDトークンが取得できました。
アクセストークンを取得します。az account get-access-tokenを実行します。取得したトークンは、tnsnames.oraにTOKEN_LOCATIONとして指定している/Uses/[ユーザー名
]/Documents/mcp-salesadb-entraid/token.txtに出力します。
az account get-access-token --scope "api://アプリケーションID URL/session:scope:connect" --query accessToken -o tsv > ~/Documents/mcp-salesadb-entraid/token.txt
~ % az account get-access-token --scope "api://70ec****-****-****-****-********2b4a/session:scope:connect" --query accessToken -o tsv > ~/Documents/mcp-salesadb-entraid/token.txt
~ %
~/Documents/mcp-salesadb-entraid/token.txtにはアクセストークンが出力されています。https://jwt.ioに貼り付けて、内容を確認できます。
アクセストークンが取得できたので、データベースに接続します。
SQLclを起動し、Autonomous AI Database SALESADBに接続します。また、接続をMCPサーバーで参照できるように、salesadbと名前をつけて保存します。
export TNS_ADMIN=~/Documents/mcp-salesadb-entraid
sql -home $TNS_ADMIN /nolog
connect -save salesadb -savepwd /@salesadb_token
ユーザー名、パスワードの指定なしでデータベースに接続されます。
~ % export TNS_ADMIN=~/Documents/mcp-salesadb-entraid
~ % sql -home $TNS_ADMIN /nolog
SQLcl: 木 2月 12 11:10:08 2026のリリース25.4 Production
Copyright (c) 1982, 2026, Oracle. All rights reserved.
SQL> connect -save salesadb -savepwd /@salesadb_token
名前: salesadb
接続文字列: salesadb_token
ユーザー:
パスワード: 未保存
接続しました.
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.n****_outlook.com_EXT_@*******soutlook.onmicrosoft.com
SQL>
データベース・ユーザーMCPUSERとして接続されています。Entra IDで認証されたユーザーは、システム・コンテキストのUSERENVにAUTHENTICATED_IDENTITYとして設定されています。
仮想プライベート・データベースやReal Application Securityといった、接続ユーザーによるアクセス制御は、AUTHENTICATED_IDENTITYを元に設定することになります。
このMCPサーバーをClaude Desktopに追加する記述です。
{
"mcpServers": {
"sqlcl": {
"command": "/Users/[ユーザー名]/sqlcl/bin/sql",
"args": [
"-home",
"/Users/[ユーザー名]/Documents/mcp-salesadb-entraid",
"-R",
"0",
"-mcp"
],
"env": {
"TNS_ADMIN": "/Users/[ユーザー名]/Documents/mcp-salesadb-entraid"
}
}
},
"preferences": {
"coworkScheduledTasksEnabled": false,
"sidebarMode": "chat"
}
}
このMCPサーバーを設定して、Claude DesktopからAutonomous AI Databaseに問い合わせてみました。
以上でSQLclのMCPサーバーからデータベースに接続するにあたって、Microsoft Entra IDに登録されている個人として認証することができました。
今回の記事は以上になります。
完