Skip to content

MS Entra ID トークン認証

Microsoft Entra ID(旧 Azure Active Directory)が発行する OAuth 2.0 アクセストークンを使って Oracle Database に接続する機能です。

従来のパスワード認証では、DB 側でユーザーのパスワードを管理する必要がありました。 Entra ID と連携することで、認証を外部の ID プロバイダに委ねることができ、既存の Entra ID ユーザー管理・ロール管理をそのまま DB アクセス制御に活かせます。

[ クライアント ] [ Entra ID ] [ Oracle Database ]
|  | |
|── 1. トークン取得 ───▶| |
|◀── アクセストークン ──| |
|  | |
|─────────── 2. 接続 (OAUTH + TLS) ─────────▶|
| | |
| | 3. トークン検証
| | (IDENTITY_PROVIDER_CONFIG)
| | |
| | 4. ユーザー/ロールマッピング
| | (AZURE_USER / AZURE_ROLE)
| | |
  1. クライアントが Entra ID からアクセストークン(JWT)を取得する
  2. tnsnames.oraTOKEN_AUTH=OAUTH を指定し、TCPS(TLS)で DB に接続する
  3. DB が IDENTITY_PROVIDER_CONFIG に設定されたテナント情報を元にトークンを検証する
  4. トークンの upn クレームまたはアプリロールに対応する DB ユーザーでセッションが確立される

なお、この接続には TLS(TCPS)が必須です。

このサイトでは、以下の2つのフローを扱います。

委任されたアクセス許可(認可コードフロー)クライアント・クレデンシャルフロー
ユーザーの関与あり(対話的ログイン)なし(アプリ自身の権限)
用途ユーザーが直接 DB にアクセスする場面バッチ・デーモン・サーバー間連携
Scope 指定api://<App ID>/<scope名>api://<App ID>/.default
DBユーザーのマッピングAZURE_USER=<upn>AZURE_ROLE=<アプリロール名>
トークンのクレームupn が必要不要
パラメータ説明
IDENTITY_PROVIDER_TYPEAZURE_AD を指定
IDENTITY_PROVIDER_CONFIGテナント ID・アプリケーション ID・App ID URI を JSON で設定

DB ユーザー/ロールの作成構文

Section titled “DB ユーザー/ロールの作成構文”
-- Entra ID ユーザーにマッピング(認可コードフロー)
CREATE USER <DB ユーザー> IDENTIFIED GLOBALLY AS 'AZURE_USER=<upn>';
-- Entra ID アプリロールにマッピング(クライアントクレデンシャルフロー)
CREATE USER <DB ユーザー> IDENTIFIED GLOBALLY AS 'AZURE_ROLE=<ロール名>';
CREATE ROLE <DB ロール> IDENTIFIED GLOBALLY AS 'AZURE_ROLE=<ロール名>';
<接続名> = (
DESCRIPTION=
(ADDRESS=(PROTOCOL=TCPS)(HOST=<ホスト>)(PORT=<ポート>))
(SECURITY=
(TOKEN_AUTH=OAUTH)
(TOKEN_LOCATION=<トークンファイルのパス>)
(WALLET_LOCATION=<クライアントウォレットのパス>))
(CONNECT_DATA=(SERVICE_NAME=<サービス名>)))
  1. Entra ID の設定

    Oracle Database 用の API アプリケーションを Entra ID に登録し、スコープの公開・トークンバージョン(v2)・upn クレームの設定を行います。あわせて OAuth クライアントを作成し、API へのアクセス許可を設定します。

  2. Database の設定

    IDENTITY_PROVIDER_TYPE / IDENTITY_PROVIDER_CONFIG を設定し、Entra ID ユーザーに対応する DB ユーザーを作成します。

  3. 接続を試す

    Azure CLI または Postman でアクセストークンを取得し、SQLcl から TCPS 接続で DB にログインできることを確認します。接続コンテキスト(AUTH_METHODAUTHENTICATED_IDENTITY など)も検証します。