この記事の補足としてAutonomous AI DatabaseとEntra IDの認証連携の方法も紹介します。Entra ID側の設定は基本的には同じですが、今回はEntra ID v2のトークンの設定手順にしています。
また、データベース側のパラメータ設定はAutonomous AI Database独自のものになっているくらいが違いかと思います。
ドキュメントも併せて確認して下さい。
Entra IDにOracle Datatabase接続用のアプリを作成する
APIの公開 -> アプリケーションIDのURIの追加をクリック。デフォルト値のまま保存。アプリケーションIDのURIもメモしておく

すぐ下にあるScopeの追加をクリックし、スコープ名をsession:scope:connectに指定して、同意できるのを管理者とユーザーに指定して登録する

トークン構成 -> オプションの要求と追加、IDとupnをチェックして追加

所有者 -> 所有者の追加から任意の管理者ユーザーを選択する

マニフェスト -> requestedAccessTokenVersionを2に変更して保存

アプリロールの作成
登録したアプリにアプリロールを作成する。このアプリ・ロールは、EntraIDのユーザとデータベースのロールとの紐づけに使用する。EntraIDに以下のユーザーとグループを作成する
アプリロール -> アプリロールの作成をクリック。表示名と値は、db_users、許可されたメンバーは両方を選択し作成する。同様の手順でdb_admins, resource_role, pdb_dba_roleも作成する

アプリケーションの許可を選択し、作成したすべてのアプリロールをチェックしてアクセス許可の追加をクリック

"xxxxに管理者の同意を与えます"をクリック。状態が"xxxxに付与されました"になればOK

Entra IDのユーザー・グループとアプリロールの紐づけ
Oracle Databaseに接続する実際にEntraIDのユーザーやグループとアプリロールをマッピングする
Entra IDに2つのユーザーを作成する(dbmgr, dbuser001)

Entra IDに2つのグループを作成する(resource_role, pdb_dba_role)

ユーザーとグループをクリックし、ユーザーは、dbuser001を選択する

同様の手順で、dbmgrユーザーにdb_adminsロール、pdb_dba_role, resource_roleグループにもそれぞれ同名のロールを割り当てる。※グループへの割り当ては、有償プランのEntraIDのみ可能。無償プランの場合は、赤枠のユーザーのみのマッピングだけしておく

Autonomous AI Databaseへの設定を追加
ADBは、すでに1522でTLS設定がされているので、以下の手順のみでテスト可能
#ADBから接続用のOracle Walletをダウンロードし、/home/opc/walletに解凍
[opc@ Wallet]$ ls
cwallet.sso ewallet.pem ojdbc.properties sqlnet.ora truststore.jks
ewallet.p12 keystore.jks README tnsnames.ora
#sqlnet.oraのWalletのパスを/home/opc/Walletに変更する
$ vi /home/opc/Wallet/sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/home/opc/Wallet")))
SSL_SERVER_DN_MATCH=yes
#TNS_ADMINを環境変数に設定
$ export TNS_ADMIN=/home/opc/Wallet
ADMINユーザーでADBに接続して以下を実行する
$ sqlplus admin/xxxxxxx@サービス名
-- Entra IDの情報を登録。テナントID,アプリケーション ID, アプリケーションURIはEntaraIDから
BEGIN
DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
type =>'AZURE_AD',
params => JSON_OBJECT('tenant_id' VALUE 'xxxxxxxx-xxxx-xxxx-9830-9e9daf45b567',
'application_id' VALUE 'xxxxxxxx-xxxx-xxxx-a208-4ad97566fa26',
'application_id_uri' VALUE 'api://xxxxxxxx-xxxx-xxxx-a208-4ad97566fa26'),
force => TRUE
);
END;
/
-- パラメータがAZURE_ADになっていることを確認
SQL> SELECT NAME, VALUE FROM V$PARAMETER WHERE NAME='identity_provider_type';
NAME VALUE
---------------------- --------
identity_provider_type AZURE_AD
-- Entra IDとマッピングするユーザーとロールを作成する
-- DBユーザーとEntra IDのロールをマッピングする
-- db_users
SQL> CREATE USER azure_globalusr IDENTIFIED GLOBALLY AS 'AZURE_ROLE=db_users';
SQL> grant connect to azure_globalusr;
-- db_admins
SQL> CREATE USER azure_dbadmins IDENTIFIED GLOBALLY AS 'AZURE_ROLE=db_admins';
SQL> grant connect,dba to azure_dbadmins;
-- DBロールとEntra IDのロールをマッピングする
-- resource_role
SQL> CREATE ROLE azure_resource_role IDENTIFIED GLOBALLY AS 'AZURE_ROLE=resource_role';
SQL> grant resource to azure_resource_role;
-- pdb_dba_role
SQL> CREATE ROLE azure_pdb_dba_role IDENTIFIED GLOBALLY AS 'AZURE_ROLE=pdb_dba_role';
SQL> grant pdb_dba to azure_pdb_dba_role;
クライアントから接続テストを行う
tnsnames.oraには、トークン認証するための接続情報を追加
azure =
(description= (retry_count=20)(retry_delay=3)
(address=(protocol=tcps)(port=1522)(host=ADBホスト名))
(connect_data=(service_name=ADBのサービス名))
(security=(ssl_server_dn_match=yes)(TOKEN_AUTH=OAUTH)))
)
以降はこの記事の接続テストと同じです










