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には最低限の権限のみを割り当ています。APEXのワークスペース・スキーマとして必要な権限は、APEXのワークスペースを作成する際に割り当てられます。

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アカウントによる認証の際に使用されます。

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


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

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