ラベル Oracle IAM の投稿を表示しています。 すべての投稿を表示
ラベル Oracle IAM の投稿を表示しています。 すべての投稿を表示

2026年9月8日火曜日

MCP Toolbox for DatabasesをOracle IAMでOIDC認証する

先日の記事「GoogleのMCP Toolbox for DatabasesをOracle Databaseで使用してみる」にて構成したOracle Databaseに接続するMCP Toolbox for Databasesに、OpenID Connectによる認証を実装します。IdPにはOracle IAMを使用します。

MCP Toolbox for DatabaseでのOpenID Connectの設定については、以下で説明されています。

Documentation / Configuration / Authentication / Generic OIDC Auth
Generic OIDC Auth

MCPとしての認証は2. MCP Authorizationに記載があります。ドキュメントに記載されている設定例は以下です。
kind: authService
name: my-generic-auth
type: generic
audience: ${YOUR_TOKEN_AUDIENCE}
authorizationServer: https://your-idp.example.com
mcpEnabled: true
scopesRequired:
  - read
  - write
kind, name, type, mcpEnabled(これはtrueにする)は、MCP Toolboxとしての設定です。IdP側(今回はOracle IAM)から入手する必要がある設定値はaudienceauthorizationServerscopesRequiredになります。

MCP Toolboxとしては、authorizationServerの値はアクセス・トークンのiss(Issuer)の値と一致し、かつ、/.well-known/openid-configurationを加えることでOIDCのDiscovery URLとなることを期待しているようです。そのDiscovery URLより取得できるドキュメントに含まれる属性jwks_uriより、JWTの署名検証用の公開鍵を取得します。

Oracle IAMが発行するトークンのデフォルトの発行者(Issuer - issの値)はhttps://identity.oraclecloud.com/です。この発行者に/.well-known/openid-configurationをつけてもOIDC Discovery URLにはならないため、Oracle IAM側の発行者は変更する必要があります。

audienceはOracle IAMのドメインに作成した統合アプリケーションプライマリ・オーディエンスとして設定した値になります。プライマリ・オーディエンスを設定するには、統合アプリケーションにリソース・サーバーを構成する必要があります。

Oracle IAMではクライアントから提示されたスコープにより、リソース・サーバーが選択されます。そのため、リソース・サーバーにスコープを設定し、そのスコープがユーザー認証時にサーバーに送信されるように接続元のクライアント(今回はMCP Inspector)を構成する必要があります。リソース・サーバーに構成されたスコープは、MCP ToolboxのscopesRequiredに含めます。

MCP Toolboxに設定する値は、上記のように決まります。

以下より、Oracle IAMのドメインでの設定を行います。作業には費用がかからないドメイン・タイプFreeの、Defaultドメインを使用します。

Oracle Cloudのコンソールから、アイデンティティとセキュリティドメインを開きます。

ドメインDefaultを開きます。


ドメインURLをコピーします。このURLに/.well-known/openid-configurationを付けるとOIDC Discovery URLとなります。この値がMCP ToolboxのauthorizationServerの値の元になります。MCP ToolboxはauthorizationServerの値がIssuerの値であることを期待しているため、このドメインURL発行者とする必要があります。ドメインURLの末尾のポート番号:443があると発行者として設定できないため、発行者として登録するURLから:443を削除します。

結果としてMCP ToolboxにauthorizationServerとして設定する値は、ドメインURLから末尾の:443を除いたURLになります。


発行者を上記のドメインURLに変更します。

セキュリティ・タブを選択し、Oauth設定 - デフォルトのトークン発行ポリシーOAuth設定の編集を開きます。


デフォルトのトークン発行ポリシー発行者ドメインURL(ポート番号無し)を設定します。

変更の保存をクリックします。


デフォルトのトークン発行ポリシー発行者が更新されたことを確認します。


統合アプリケーションを作成します。

統合アプリケーション・タブを開き、アプリケーションの追加をクリックします。


アプリケーションのタイプとして機密アプリケーションを選択します。

ワークフローの起動をクリックします。


作成する機密アプリケーションの名前MCP Hotelsとします。説明は何でもよいのですが、Search for a hotelと記述しています。認証と認可権限付与を認可として実施オンにします。

以上を設定して送信します。


統合アプリケーションMCP Hotelsが作成されます。


OAuth構成・タブを選択し、OAuth構成の編集をクリックします。リソース・サーバー構成クライアント構成の双方を実施します。


クライアント構成はリソース・サーバーの構成を参照するため、リソース・サーバー構成を先に実施します。

このアプリケーションをリソース・サーバーとして今すぐ構成します、を選択します。選択すると、設定画面が表示されます。

必須ではありませんが、トークン・リフレッシュの許可オンにします。

プライマリ・オーディエンスはMCP Toolbox for Databasesの構成に依存します。今回はローカルホストでデフォルトのポート番号である5000番で接続を待ち受けるように構成しているため、プライマリ・オーディエンスは以下になります。最後にスラッシュをつけます。

http://localhost:5000/

これはMCP Toolboxのaudienceとして設定する値になります。また、MCP Toolboxの起動オプションの--toolbox-urlとして指定する値でもあります。

スコープの追加オンにし、スコープとしてmcphotelsを追加します。

ここで設定したスコープmcphotelsは、MCP ToolboxのscopesRequiredに含めます

リソース・サーバーを構成したところで、一旦送信します。


追加したスコープmcphotelsは、表示名MCP Hotels説明Search for a hotel.としています。


先ほどと同様にOAuth構成の編集を開き、今度はクライアント構成を実施します。

このアプケーションをクライアントとして今すぐ構成します、を選択します。選択すると、設定画面が表示されます。

認可認可される権限付与タイプとして、クライアント資格証明(これはおそらく無くてもよい)、リフレッシュ・トークン(リソース・サーバーでリフレッシュ・トークンを構成し、クライアントからもリフレッシュ・トークンを要求する場合に必要)、認可コード(必須)をチェックします。

HTTPS以外のURLを許可オンにし、今回クライアントとして使用するMCP InspectorのリダイレクトURLとして、以下の4つを設定します。

http://localhost:6274/oauth/callback
http://localhost:6274/oauth/callback/debug
http://127.0.0.1:6274/oauth/callback
http://127.0.0.1:6274/oauth/callback/debug

Claude CodeやOpenAI Codexから呼び出す場合は、それぞれのアプリケーションで決められているリダイレクトURLを追加します。

ページの下に移動し、リソースの追加をオンにします。

スコープの追加をクリックし、スコープとして統合アプリケーションMCP Hotelshttp://localhost:5000/mcphotels(リソース・サーバーのプライマリ・オーディエンスhttp://localhost:5000/とスコープmcphotelsが連結)を追加します。

以上で送信します。


リソースの追加を行う画面です。

統合アプリケーションMCP Hotelsより範囲(スコープのこと)の選択にある、スコープhttp://localhost:5000/mcphotelsにチェックを入れます。


ここで選択したスコープhttp://localhost:5000/mcphotelsは、MCP InspectorのOAuth設定のスコープに含めます

以上で統合アプリケーションMCP Hotelsの構成は完了です。

OAuth構成よりクライアントIDクライアント・シークレットを取得します。

これらの値は、MCP InspectorのOAuth SettingsClient IDClient Secretとして設定します。


作成した統合アプリケーションMCP Hotelsアクティブ化します。


ユーザー・タブを開き、この統合アプリケーションで認証できるユーザーを割り当てます。

ユーザーの割当てをクリックします。


今回の作業を行なっているユーザーを割り当てます。


作成した統合アプリケーションで認証できるユーザーが割り当てられました。


以上で、Oracle IAMでの作業は完了です。

先日の記事で作成したtools.yamlに以下を追記します。OIDC認証の設定oracle-iam-authに加え、アクセス・トークンのsubクレームの値を表示するツールshow_sub_claimを定義しています。

ツールshow_sub_claimの第1パラメータとしてuser_idを設定しています。この値はauthServicesで設定しているoracle-iam-auth、つまりOracle IAMによるOIDC認証で得られたアクセス・トークンのsubの値になります。この値はSELECT文のバインド変数:1に割り当てられます。user_idはパラメータとして定義しているため、MCP Inspectorからツールを呼び出す際に値の入力を求められます。値を入力してもアクセス・トークンのsubの値で置き換えられますが、requiredfalseを設定(デフォルトはtrueなので、必ず値が必要)することにより、user_idを入力しなくてもツールを実行できるようにしています。
---
kind: authService
name: oracle-iam-auth
type: generic
authorizationServer: [発行者として設定したドメインURL(ポート番号無し)]
audience: http://localhost:5000/
mcpEnabled: true
scopesRequired:
  - openid
  - mcphotels
---
# show sub claim in access token
kind: tool
name: show_sub_claim
type: oracle-sql
source: my-oracle-instance
statement: |
  SELECT :1 sub from dual
description: |
  Show sub claim value in the access token
parameters:
  - name: user_id 
    type: string
    required: false
    description: Auto-populated from token
    authServices:
      - name: oracle-iam-auth
        field: sub
authRequired:
  - oracle-iam-auth
MCP Toolboxを実行する際に--toolbox-urlとしてaudience(resource)を指定します。

./toolbox --config tools.yaml --toolbox-url http://localhost:5000/

mcp-toolbox % ./toolbox --config tools.yaml --toolbox-url http://localhost:5000/

2026-09-08T13:20:06.905274+09:00 INFO "Starting MCP Toolbox for Databases version 1.10.0+binary.darwin.arm64.21f972f" 

2026-09-08T13:20:06.983898+09:00 INFO "Initialized 1 sources: my-oracle-instance" 

2026-09-08T13:20:08.061104+09:00 INFO "Initialized 1 authServices: orcle-iam-auth" 

2026-09-08T13:20:08.061141+09:00 INFO "Initialized 0 embeddingModels: " 

2026-09-08T13:20:08.06143+09:00 INFO "Initialized 4 tools: show_sub_claim, execute_sql, list_all_hotels, list_hotels_in_the_location" 

2026-09-08T13:20:08.061451+09:00 INFO "Initialized 0 prompts: " 

2026-09-08T13:20:08.061472+09:00 INFO "Initialized 1 groups: default" 

2026-09-08T13:20:08.061722+09:00 WARN "wildcard (*) allows any website to access the primitives. This creates a security risk regardless of whether you are in a production or local development environment. Recommended to use --allowed-origins with specific local addresses." 

2026-09-08T13:20:08.061774+09:00 WARN "wildcard (*) hosts allow any domain to access this resource, making it vulnerable to DNS rebinding attacks regardless of whether you are in a production or local development environment. For improved security, use the --allowed-hosts flag to specify trusted domains." 

2026-09-08T13:20:08.062055+09:00 INFO "Server ready to serve!" 



MCP Inspectorに登録済みのMCP ToolboxのServer Settingsを開きます。


OAuth SettingsClient IDClient SecretScopesを設定します。Scopesに設定する値は以下です。指定するスコープにプライマリ・オーディエンスを含めます。

openid http://localhost:5000/mcphotels


以上で設定はすべて完了です。

動作確認を実施します。

MCP InspectorよりMCP ToolboxのMCPサーバーに接続します。


Oracle CloudのIdentity Domainへのサインインが求められます。


Authenticatorを使ったユーザー認証が行われサインインが完了すると、アプリケーションMCP Hotelsへのアクセス許可が要求されます。

アクセスを許可すると、MCP Toolboxへの接続が完了します。


Toolsタブを開き、ツールshow_sub_claimを選択します。

パラメータuser_idには値を設定できますが、user_idの値はアクセス・トークンのsubの値に置き換えられるため、設定する意味はありません。

user_idには値を設定せずExecute Toolを実行します。


ツールの実行結果として、SUBにサインインに使用したメール・アドレスが返されます。


ツールoracle-sqlに設定するSELECT文にOIDCで認証したユーザー名を渡せるため、ツールの検索範囲をユーザーごとに制限することができます。

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

2026年7月13日月曜日

Autonomous AI Databaseのデータベース・ツールを外部認証する - Oracle IAM編

先日、Autonomous AI Databaseにアクセスしたところ、データベース・ツール(データベース・アクションおよびAPEX)で複数の外部アイデンティティ・プロバイダーを選択できるようになっていました。調べたところ、2026年7月7日に追加されていました。(リリースノート


構成手順は、公式ドキュメントの以下のセクションで紹介されています。

Using Autonomous AI Database Serverless

この中のNoteに、以下の記載があります。(下線は引用者による)
Autonomous AI Database supports external authentication for the following built-in tools in Database Actions - SQL Developer and Data Studio. The database does not support external authentication for tools, such as APEX and Oracle Machine Learning.
Oracle APEXはAutonomous AI Databaseであるかどうかに関わらず、以前から製品として外部アイデンティティ・プロバイダーをサポートしています。また、SQL Developer Webまたはデータベース・アクションでの認証と、すでにサポートされているグローバル・ユーザーによるデータベース接続の関係についても、公式ドキュメントからは読み取ることができません。

本記事では以下の3つのツールについて、外部アイデンティティ・プロバイダーによる認証の動作を確認します。
  1. Autonomous AI Databaseのデータベース・ツール(今回の新機能)
  2. Oracle APEXの管理サービスでの外部認証の構成
  3. SQLclでのグローバル・ユーザーによるデータベース接続
以前の記事と重複している部分も多いのですが、以下より確認作業について紹介します。

外部アイデンティティ・プロバイダーとしてOracle IAMを使用します。


Autonomous AI Databaseの作成



Oracle Cloudのコンソールより、Always FreeのAutonomous AI Databaseを作成します。

表示名SALESADBデータベース名SALESADBとします。ワークロード・タイプレイクハウスを選択します。データベース構成Always Freeをオンにし、データベース・バージョンとして19cを選択します。

その他、管理者ユーザーADMINパスワードなどを設定し、Autonomous AI Databaseを作成します。


作成をクリックすると、データベースのプロビジョニングが開始します。


データベースが使用可能になったことを確認し、手元のクライアントからデータベースに接続するために使用するウォレットをダウンロードします。

手元のPCに、作業ディレクトリとしてsalesadb-oracleiamを作成し移動します。

mkdir salesadb-oracleiam
cd salesadb-oracleiam


Documents % mkdir salesadb-oracleiam

Documents % cd salesadb-oracleiam

salesadb-oracleiam % 


データベース接続をクリックします。


ウォレット・タイプインスタンス・ウォレットを選択し、ウォレットのダウンロードをクリックします。


ウォレットにパスワードを設定し、ダウンロードを実行します。今回の用途では、設定したパスワードを参照することはありません。

ウォレットはWallet_SALESADB.zipとしてダウンロードされます。ダウンロードされたウォレットは、先ほど作成したディレクトリsalesadb-oracleiam以下に移動しておきます。

作業ディレクトリを環境変数TNS_ADMINに設定し、ウォレットを解凍します。

export TNS_ADMIN=$PWD
unzip -d . Wallet_SALESADB.zip
 

salesadb-oracleiam % export TNS_ADMIN=$PWD

salesadb-oracleiam % unzip -d . Wallet_SALESADB.zip 

Archive:  Wallet_SALESADB.zip

  inflating: ./ewallet.pem           

  inflating: ./README                

  inflating: ./cwallet.sso           

  inflating: ./tnsnames.ora          

  inflating: ./truststore.jks        

  inflating: ./ojdbc.properties      

  inflating: ./sqlnet.ora            

  inflating: ./ewallet.p12           

  inflating: ./keystore.jks          

salesadb-oracleiam % 


管理者ユーザーADMINにて、Autonomous AI DatabaseのSALESADBに接続します。接続にはSQLclを使用します。

sql admin@salesadb_low

salesadb-oracleiam % sql admin@salesadb_low


SQLcl: 月 7月 13 11:57:28 2026のリリース26.1 Production


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


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

Last Successful login time: 月 7月  13 2026 11:57:35 +09:00


接続先:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.32.0.1.0


SQL> exit

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.32.0.1.0から切断されました

salesadb-oracleiam % 


以上で、作業に使用するAutonomous AI Databaseが用意できました。


Oracle IAMの構成



Oracle IAMによる認証には、Oracle IAMのユーザーをスキーマに割り当てる方法と、Oracle IAMのグループをスキーマに割り当てる方法の2種類があります。今回は、Oracle IAMのグループをスキーマWKSP_APEXDEVに割り当てます。

Oracle IAMにグループsales_dbusersを作成し、そのグループに所属しているユーザーがAutonomous AI Databaseを利用できるようにポリシーを設定します。

Oracle Cloudのコンソールのアイデンティティとセキュリティよりドメインを開き、ルート・コンパートメントにあるドメインDefaultを開きます。


ドメインDefaultユーザー管理を開きます。

グループの作成をクリックします。


作成するグループの名前sales_dbusersとします。説明に、データベースに接続できるユーザーと書きました。

グループsales_dbusersに含めるユーザーをチェックします。Oracle Databaseに接続するユーザーはブラウザよりサインインします。そのため、Oracle Cloudのコンソールにサインインしているユーザーを、グループsales_dbusersに含めると確認が容易です。

以上で作成をクリックします。


アイデンティティとセキュリティポリシーを開きます。

ポリシーの作成をクリックします。


ポリシーの名前sales_test_policyとします。説明には、allow group sales_dbusers to connect to all autonomous databasesと書きました。コンパートメントルート・コンパートメントを選択します。

ポリシー・ビルダー手動エディタを表示し、ポリシー・ステートメントとして以下を記述します。

allow group sales_dbusers to use autonomous-database-family in tenancy

以上でポリシーを作成します。


ポリシーsales_test_policyが作成されます。

以上でOracle IAMでの設定は完了です。


データベース・ツールの外部認証の構成



SALESADBに管理者ユーザーADMINで接続します。接続にはSQLclを使用します。

sql admin@salesadb_low

salesadb-oracleiam % sql admin@salesadb_low


SQLcl: 月 7月 13 12:29:07 2026のリリース26.1 Production


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


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

Last Successful login time: 月 7月  13 2026 12:29:13 +09:00


接続先:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.32.0.1.0


SQL> 


Oracle IAMによる外部認証を有効にします。
BEGIN
   DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
      type  => 'OCI_IAM',
      force => TRUE
   );
END;
/

SQL> BEGIN

  2     DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(

  3        type  => 'OCI_IAM',

  4        force => TRUE

  5     );

  6  END;

  7* /


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    OCI_IAM    


SQL> 


データベース・ユーザーとしてWKSP_APEXDEVを作成します。このユーザーは、Oracle APEXのワークスペースAPEXDEVのデフォルト・パーシング・スキーマとして使用します。

データベース・ユーザーWKSP_APEXDEVには、IAMのグループsales_dbusersを割り当てます。WKSP_APEXDEVには最低限の権限のみを割り当ています。

create user wksp_apexdev identified globally as 'IAM_GROUP_NAME=sales_dbusers';
alter user wksp_apexdev quota 25m on data;
grant create session to wksp_apexdev;
grant create table, create view, create sequence to wksp_apexdev;


SQL> create user wksp_apexdev identified globally as 'IAM_GROUP_NAME=sales_dbusers';


User WKSP_APEXDEVは作成されました。


SQL> alter user wksp_apexdev quota 25m on data;


User WKSP_APEXDEVが変更されました。


SQL> grant create session to wksp_apexdev;


Grantが正常に実行されました。


SQL> grant create table, create view, create sequence to wksp_apexdev;


Grantが正常に実行されました。


SQL> 


スキーマWKSP_APEXDEVをREST有効にします。ORDS別名にapexdev(これがAPEXワークスペース名として扱われます)を割り当てます。
BEGIN
    ORDS_ADMIN.ENABLE_SCHEMA(
        p_enabled             => TRUE,
        p_schema              => 'WKSP_APEXDEV',
        p_url_mapping_type    => 'BASE_PATH',
        p_url_mapping_pattern => 'apexdev',
        p_auto_rest_auth      => FALSE);
END;
/

SQL> BEGIN

  2      ORDS_ADMIN.ENABLE_SCHEMA(

  3          p_enabled             => TRUE,

  4          p_schema              => 'WKSP_APEXDEV',

  5          p_url_mapping_type    => 'BASE_PATH',

  6          p_url_mapping_pattern => 'apexdev',

  7          p_auto_rest_auth      => FALSE);

  8  END;

  9* /


PL/SQLプロシージャが正常に完了しました。


SQL> exit

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.32.0.1.0から切断されました

salesadb-oracleiam %


Oracle IAMを外部アイデンティティ・プロバイダーとして使用する場合は、DBMS_CLOUD_FUNCTION_ADMIN.CREATE_IDPの呼び出しは不要です。

以上で、データベース・ツールの認証にOracle IAMを使用できるようになりました。


データベース・ツールへの接続



Autonomous AI Databaseに接続し、使用するツールとしてSQL Developer Webを選択します。


SSOでサインインをクリックします。


外部アイデンティティ・プロバイダーとしてOCI IAMを選択します。


Oracle Cloudへのサインイン画面が開きます。ユーザー名とパスワードを入力し、サインインします。


Authenticatorを構成していると、Authenticatorによる許可を求められます。


HTTPのステータス・コードとして404 Not Foundが返されました。


今回は、APEXに合わせて、スキーマ名WKSP_APEXDEVORDS別名(APEXワークスペース名)をapexdevにしています。スキーマのREST有効化のために、ORDS_ADMIN.ENABLE_SCHEMAを以下の引数で呼び出しています。
BEGIN
    ORDS_ADMIN.ENABLE_SCHEMA(
        p_enabled             => TRUE,
        p_schema              => 'WKSP_APEXDEV',
        p_url_mapping_type    => 'BASE_PATH',
        p_url_mapping_pattern => 'apexdev',
        p_auto_rest_auth      => FALSE);
END;
/
URLを確認すると/ords/wksp_apexdev/_sdw/となっています。つまり、データベース・ツールのSSO認証でのリダイレクト先としてスキーマ名が使われ、ORDS別名(p_url_mapping_patternの値)が使われていないことが問題のようです。

ブラウザに表示されているURLの/ords/wksp_apexdev/_sdw/の部分を/ords/apexdev/_sdw/に変更して、URLにアクセスします。

スキーマWKSP_APEXDEVを接続先として、データベース・アクションの画面が開きます。


Oracle IAMで認証したユーザーにて、データベース・ツールに接続できました。

データベース・アクションより以下のSELECT文を実行し、どのようにユーザーが認証されているか確認してみます。
select
    sys_context('userenv','authentication_method')  authenticated_method,
    sys_context('userenv','authenticated_identity') authenticated_identity,
    sys_context('userenv','session_user')           session_user,
    sys_context('userenv','current_user')           current_user
from dual

AUTHENTICATED_METHODはNONE、AUTHENTICATED_IDENTITY、SESSION_USER、CURRENT_USERすべてが、接続スキーマであるWKSP_APEXDEVを返しています。

データベース・ツールの外部アイデンティティ・プロバイダーによる認証は、データベース・ツールの認証であって、データベース接続の認証には使用されていないようです。


Oracle APEXへの接続



Oracle APEXへ接続します。


There are no workspaces associated with your account.」と報告されますが、Oracle IAMで認証されたユーザーは認識されています。


APEXのワークスペースとしてAPEXDEVを作成し、Oracle IAMのユーザーに作成したAPEXのワークスペースを割り当てます。

上記の画面からサインアウトし、管理者ユーザーADMINでサインインし直します。


管理サービスにサインインし、ワークスペースの作成を実行します。


既存のスキーマを選択します。


ORDS_ADMIN.ENABLE_SCHEMAに与えた引数の値に合わせて、データベース・ユーザーWKSP_APEXDEVワークスペース名apexdevとします。

ワークスペース・ユーザー名apexdevワークスペース・パスワードにパスワードを設定します。このユーザーはワークスペースの管理者になります。必ずしもワークスペース名に一致している必要はありませんが、この名前でデータベース・ユーザーが作成されます。

以上でワークスペースを作成します。


ワークスペースが作成されます。

インスタンスに設定されている開発環境認証スキームを確認します。

インスタンス管理を開きます。


インスタンス管理セキュリティを開きます。


認証制御開発環境認証スキームを確認すると、Autonomous AI Database Single Sign-Onカレント・スキームであることが確認できます。


Autonomous AI Database Single Sign-Onの説明に「This scheme authenticates developers using the integrated identity provider in Oracle Autonomous AI Database.」と記述されています。Autonomous AI Databaseに構成しているアイデンティティ・プロバイダーで認証する、と説明されています。

ワークスペースの管理から開発者とユーザーの管理を開き、Oracle IAMのユーザーに、APEXのワークスペースAPEXDEVを割り当てます。


ユーザーの作成をクリックします。

APEXの管理者ユーザーや開発者ユーザーの外部認証は、あくまで認証に外部のアイデンティティ・プロバイダーを使うだけです。管理者や開発者であるユーザーは、それぞれのワークスペースに作成する必要があります。


ユーザー名Oracle IAMで認証されるユーザー名を設定します。大文字小文字は区別しないため、英大文字で設定します。電子メール・アドレスは必須項目なので入力します。

ワークスペースを割り当てます。今回の作業ではAPEXDEVを割り当てています。管理者か開発者かの権限を選択します。

パスワードの設定は必須です。管理ツールや開発ツールの認証は外部アイデンティティ・プロバイダーによって行われるため、ここで設定しているパスワードは使用されません。認証スキームOracle APEXアカウントによる認証の際に使用されます。

以上でユーザーを作成します。


注)APEXの管理者ユーザーまたは開発者ユーザーを作成すると、同名のデータベース・ユーザーが作成されていました。ユーザー認証は、外部アイデンティティ・プロバイダーによって行われています。CREATE SESSION権限が割り当たっていないため、そのユーザーでデータベースに接続できません。より安全性を求める場合、NO AUTHENTICATION(パスワード無し)に変更できます。データベース・ユーザーからパスワードを除いても、APEXへのサインインは可能です。

ワークスペースAPEXDEVに管理者ユーザーが追加されました。


再度、APEXへのサインインを試みます。

今度はサインインしたユーザーに、APEXのワークスペースAPEXDEVが割り当たっています。

サインインするワークスペースとしてAPEXDEVを選択します。


APEXのワークスペースに接続できました。


以上で、外部アイデンティ・プロバイダーで認証したユーザーで、Oracle APEXの開発ツールに接続できました。


SQLclでの接続



Oracle IAMで発行してもらったアクセス・トークンを使って、データベースに接続します。作業はMacBook Pro、macOS Tahoe 25.6.1で実施します。

Homebrewを使ってoci-cliをインストールします。

brew install oci-cli

私の環境にはoci-cli 3.89.1がインストールされていました。

salesadb-oracleiam % brew install oci-cli

Warning: oci-cli 3.89.1 is already installed and up-to-date.

To reinstall 3.89.1, run:

  brew reinstall oci-cli

salesadb-oracleiam % 


db-tokenの取得をリクエストします。

OCIプロファイルが未構成なので、初回実行時はOCIプロファイルが構成されます。

oci iam db-token get

~/.oci/configが存在しない場合、新たに作成するかどうか聞かれます。デフォルトのYで継続します。

salesadb-oracleiam % oci iam db-token get

ERROR: Could not find config file at /Users/______________/.oci/config

Do you want to create a new config file? [Y/n]: 


browserを使ってログインすることで作業を継続するか?と聞かれます。デフォルトのYを選択し、ブラウザからサインインします。

リージョンを選択するとブラウザが開きます。

Do you want to create your config file by logging in through a browser? [Y/n]: 

Enter a region by index or name(e.g.

1: af-casablanca-1, 2: af-johannesburg-1, 3: ap-batam-1, 4: ap-chiyoda-1, 5: ap-chuncheon-1,

6: ap-chuncheon-2, 7: ap-dcc-canberra-1, 8: ap-dcc-gazipur-1, 9: ap-delhi-1, 10: ap-hyderabad-1,

11: ap-ibaraki-1, 12: ap-kulai-2, 13: ap-melbourne-1, 14: ap-mumbai-1, 15: ap-osaka-1,

16: ap-seoul-1, 17: ap-seoul-2, 18: ap-singapore-1, 19: ap-singapore-2, 20: ap-suwon-1,

21: ap-sydney-1, 22: ap-tokyo-1, 23: ca-montreal-1, 24: ca-toronto-1, 25: eu-amsterdam-1,

26: eu-budapest-1, 27: eu-crissier-1, 28: eu-dcc-dublin-1, 29: eu-dcc-dublin-2, 30: eu-dcc-milan-1,

31: eu-dcc-milan-2, 32: eu-dcc-rating-1, 33: eu-dcc-rating-2, 34: eu-dcc-zurich-1, 35: eu-frankfurt-1,

36: eu-frankfurt-2, 37: eu-jovanovac-1, 38: eu-madrid-1, 39: eu-madrid-2, 40: eu-madrid-3,

41: eu-marseille-1, 42: eu-milan-1, 43: eu-paris-1, 44: eu-stockholm-1, 45: eu-turin-1,

46: eu-zurich-1, 47: il-jerusalem-1, 48: me-abudhabi-1, 49: me-abudhabi-2, 50: me-abudhabi-3,

51: me-abudhabi-4, 52: me-alain-1, 53: me-alrayyan-1, 54: me-dcc-doha-1, 55: me-dcc-muscat-1,

56: me-dubai-1, 57: me-ibri-1, 58: me-jeddah-1, 59: me-riyadh-1, 60: mx-monterrey-1,

61: mx-queretaro-1, 62: sa-bogota-1, 63: sa-riodejaneiro-1, 64: sa-santiago-1, 65: sa-saopaulo-1,

66: sa-valparaiso-1, 67: sa-vinhedo-1, 68: uk-cardiff-1, 69: uk-gov-cardiff-1, 70: uk-gov-london-1,

71: uk-london-1, 72: us-ashburn-1, 73: us-ashburn-2, 74: us-chicago-1, 75: us-gov-ashburn-1,

76: us-gov-chicago-1, 77: us-gov-phoenix-1, 78: us-langley-1, 79: us-luke-1, 80: us-newark-1,

81: us-phoenix-1, 82: us-saltlake-2, 83: us-sanjose-1, 84: us-somerset-1, 85: us-thames-1): ca-toronto-1

    Please switch to newly opened browser window to log in!

    You can also open the following URL in a web browser window to continue:

https://login.ca-toronto-1.oraclecloud.com/v1/oauth2/authorize?action=login&client_id=iaas_console&response_type=token+id_token&nonce=feddb11d-754c-41ce-9c59-544adf82c22a&scope=openid&public_key=eyJrdHkiOiAiUl**********************************************************3JlZCJ9&redirect_uri=http%3A%2F%2Flocalhost%3A8181




ブラウザからOracle Cloudへのサインインが完了すると、~/.oci/configが作成されます。

    Completed browser authentication process!

Uploaded new API key with fingerprint: 97:4a:f1:88:33:9a:f5:50:a9:e4:34:06:db:7d:7f:dc

Enter a passphrase for your private key ("N/A" for no passphrase): N/A

Repeat for confirmation: N/A

Config written to: /Users/__________/.oci/config


    Try out your newly registered credentials with the following example command:


    oci iam region list --config-file /Users/_________/.oci/config --profile DEFAULT


Successfully created config file with your new CLI user profile

Once your public key is uploaded in the console, you can re-run your command to use your new config file and user profile

salesadb-oracleiam % 


コマンドを再実行して、データベースへの接続に使用するトークンを取得します。

salesadb-oracleiam % oci iam db-token get

Private key written at /Users/__________/.oci/db-token/oci_db_key.pem

db-token written at: /Users/__________/.oci/db-token/token

db-token is valid until 2026-07-13 16:03:31

salesadb-oracleiam %


データベースにアクセス・トークンを使って接続できるように、tnsnames.oraに、securityの設定に(TOKEN_AUTH=OCI_TOKEN)を追加したTNS名salesadb_ociを追加します。TOKEN_LOCATIONはデフォルトの位置なので省略できます。
salesadb_oci = (
    description= (retry_count=20)(retry_delay=3)
    (address=(protocol=tcps)(port=1522)(host=adb.ca-toronto-1.oraclecloud.com))
    (connect_data=(service_name=**************_salesadb_low.adb.oraclecloud.com))
    (security=(ssl_server_dn_match=yes)(TOKEN_AUTH=OCI_TOKEN))
)
Autonomous AI DatabaseのSALESADBに、データベースのアクセス・トークンを使って接続します。

sql /@salesadb_oci

salesadb-oracleiam % sql /@salesadb_oci  


SQLcl: 月 7月 13 15:03:43 2026のリリース26.1 Production


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


接続先:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.32.0.1.0


SQL>


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

以下のSELECT文を実行します。
select
    sys_context('userenv','authentication_method')  authenticated_method,
    sys_context('userenv','authenticated_identity') authenticated_identity,
    sys_context('userenv','session_user')           session_user,
    sys_context('userenv','current_user')           current_user
from dual

SQL> select

  2      sys_context('userenv','authentication_method')  authenticated_method,

  3      sys_context('userenv','authenticated_identity') authenticated_identity,

  4      sys_context('userenv','session_user')           session_user,

  5      sys_context('userenv','current_user')           current_user

  6  from dual

  7* /


AUTHENTICATED_METHOD    AUTHENTICATED_IDENTITY       SESSION_USER    CURRENT_USER    

_______________________ ____________________________ _______________ _______________ 

TOKEN_GLOBAL            yuji.n******@********.com    WKSP_APEXDEV    WKSP_APEXDEV    


SQL> exit

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.32.0.1.0から切断されました

salesadb-oracleiam % 


データベース・ツールから実行したときと異なり、AUTHENTICATED_METHODはTOKEN_GLOBAL、AUTHENTICATED_IDENTITYは、Oracle IAMに登録されているユーザー名が返されます。

今回の構成で使用したスキーマWKSP_APEXDEVですが、スキーマにパスワードを設定していません。データベース・ツール、Oracle APEXおよびSQclの全てで、Oracle IAMで認証したアイデンティティによってスキーマWKSP_APEXDEVに接続しています。パスワードを設定していない以上、スキーマWKSP_APEXDEVのパスワードが流出することはありません。

Oracle IAMでのユーザー認証は、多要素認証などが適用されており、単純なユーザー名とパスワードだけで認証するということはありません。そのため、これまでのデータベース・ユーザーとパスワードによる認証と比べて、より安全になっています。

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