主要なOAuthフロー: Microsoft Entra IDを使用したセキュアなOracle Databaseアクセスの強化 (2025/07/12)

主要なOAuthフロー: Microsoft Entra IDを使用したセキュアなOracle Databaseアクセスの強化 (2025/07/12)

https://blogs.oracle.com/ateam/post/key-oauth-flows-secure-database-access-with-entra-id

投稿者:Anuj Tripathi | Principal Solution Architect, NA Cloud Engineering


 導入

AI主導の世界では、データは洞察の源となりますが、それは安全にアクセスできることが前提となります。従来のパスワードベースのデータベース接続では、「ジャストインタイム」アクセス、委任された権限、マルチクラウドIDといった現代のニーズに対応できません。現代の企業は、Microsoft Entra IDを介してOracle DatabaseをOAuthで保護されたリソースとして扱うことで、データベースを含むあらゆる層でIDを統合しています。シナリオに応じて、以下のOAuth2フローのいずれかを選択できます。

  1. 認証コード
    インタラクティブなユーザー主導のログイン: エンド ユーザーは Entra ID 経由でサインインし、アプリがユーザーのデータを取得するために使用するトークンを取得します。
  2. クライアント資格情報
    の自動化されたバックグラウンド アクセス: サービスまたはデーモンは Entra ID に対して自身を認証し (人間の介入なし)、データベースに接続するためのトークンを取得します。スケジュールされたレポート、ETL ジョブ、またはあらゆる「ヘッドレス」プロセスに最適です。
  3. On-Behalf-Of (OBO)
    多層委任: フロントエンド アプリはユーザー トークンを取得し、それを 2 番目のトークンと交換して、同じユーザーとしてダウンストリーム API (最終的にはデータベース) を呼び出します。これにより、ユーザーの ID とアクセス許可が最後まで保持されます。
  4. ブラウザを開くことができない
    デバイスまたは CLI ツールでのデバイス コード対話型ログイン: クライアントは短いコードと URL を表示し、ユーザーは 2 番目のデバイスで認証を完了し、クライアントはトークンを受信するまでポーリングします。

以下に、各フローの実際のシナリオと、Entra 側と Oracle 側の両方でプロビジョニングするユーザー、グループ、アプリ ロール、スキーマ、データベース ロールの詳細を示します。


1. 認可コードフロー

ユースケースとシナリオ

Acme 社の運用チームを想像してください。運用アナリストと運用 DBA の 2 つのグループはどちらも SQL Developer を使用して同じ Oracle スキーマを操作しますが、それぞれ異なるレベルのアクセスが必要です。

  • オペレーションアナリストは、在庫およびサプライチェーンテーブルに対して日々のクエリを実行し、重要でない構成設定を調整し、「what-if」モデルを構築します。OPS_USERSスキーマへの読み取り/書き込みアクセス権が必要です。
  • 運用 DBA は、インデックスの作成、許可の管理、パフォーマンスの調整などの管理タスクを時々実行するため、アナリストの CRUD 権限に加えて完全な DBA 権限が必要です。

どちらのグループもSQL Developerを開き、Entra ID認証を選択すると、企業の認証情報でサインインします(必要に応じてMFAも完了します)。Entra IDは、グループクレームとアプリロールクレームを含むOAuthアクセストークンを発行します。Oracleはこれらのクレームを読み取り、次のようにマッピングします。

  • アナリスト → 読み取り/書き込みロールを持つ OPS_USERS スキーマ
  • DBA → OPS_USERSスキーマと組み込みのPDB_DBAロール

このアプローチにより、シームレスなシングル サインオン、ジャストインタイムの権限昇格 (別の DBA アカウントを覚える必要はありません)、エンドツーエンドの監査可能性が実現します。すべてのクエリと管理アクションは、実際の Entra ID ユーザーに対して記録されます。

なぜそれが重要なのか

  • シームレスな SSO:アナリストと DBA は同じ使い慣れた Entra ID 資格情報を使用するため、追加のデータベース パスワードを管理する必要はありません。
  • 動的権限の昇格:アナリストは CRUD のみを取得し、DBA は別のアカウントに再接続せずに CRUD + PDB_DBA を取得します。
  • 監査とコンプライアンス: Oracle SYS_CONTEXT は、どの Entra ID ユーザーがクエリ、DDL、または管理タスクを実行したかを正確にキャプチャし、ガバナンス要件を満たします。

Entra ID ユーザー / グループ / アプリ

Entra ID アプリの役割と割り当て

Oracle データベースのグローバル ユーザー/ロール

Oracle データベースのユーザー/ロール権限

ユーザー: operations_analyst@ent.com、operations_dba@ent.com;

グループ: Ops_Users、DBA

割り当て: operations_analyst@ent.com → Ops_Users;

operations_dba@ent.com → DBA

アプリの役割:

OpsUsers_AR、DBA_AR;

割り当て: Ops_Users → OpsUsers_AR; DBA → DBA_AR

'AZURE_ROLE=OpsUsers_AR' としてグローバルに識別されるユーザー OPS_Users を作成します。

'AZURE_ROLE=DBA_AR' としてグローバルに識別されるロール DBA_Role を作成します。

 OPS_Usersに CREATE SESSION、CONNECT、RESOURCE 権限を付与します。

PDB_DBA を DBA_Role に付与します。 

OPS_* テーブルに対する SELECT、INSERT、UPDATE 権限を OPS_Users に付与します。

 


2. クライアント資格情報フロー

ユースケースとシナリオ

自動レポートサービス
多くの企業では、重要なレポートジョブは業務時間外に実行され、誰もキーボードを打つことはありません。例えば、Enterprise_Reporting_App を想像してみてください。このアプリは毎朝起動し、Oracle データベースから前日の売上、在庫、財務データを抽出し、分析ウェアハウスにロードして、PDF ダッシュボードを経営陣に配信します。このサービスは、人間がサインインする必要がないため、 すべての認証に OAuth2 クライアント資格情報フローを利用しています。

実際の仕組みは以下のとおりです。レポートサービスは、独自のEntra IDクライアントIDとクライアントシークレットを使用して、Entra IDの/tokenエンドポイントからトークンを要求します。Entra IDはこれらの資格情報を検証し、Enterprise_Reporting_App専用のアクセストークンを返します。その後、レポートサービスは、通常ODP.NET、JDBC、またはORDSを介してそのトークンをOracleに渡します。Oracleは、この呼び出しをAPP_REPORTS_SVCユーザーからの呼び出しとして扱います。バックグラウンドでは、Oracleはトークンのapp-roleクレームを、必要な権限(例えば、REPORTING _*テーブルに対するSELECT権限、ストアドプロシージャパイプラインに対するEXECUTE権限)のみを付与するデータベースロールにマッピングします。

なぜそれが重要なのか

  • 埋め込まれた資格情報はありません:すべてのコードと構成ファイルには静的パスワードが含まれず、Entra ID がローテーションして管理する短命の OAuth トークンのみが含まれます。
  • 最小権限の適用:サービス プリンシパルは、必要な SELECT 権限と EXECUTE 権限のみを付与するデータベース ロールにマップされます。それ以上の権限は付与されません。
  • 即時取り消し:ジョブを廃止する必要がある場合や、ジョブの資格情報が侵害された場合は、サービス プリンシパルを無効にすると、データベース アクセスが直ちに停止します。

Entra ID ユーザー / グループ / アプリ

Entra ID アプリの役割と割り当て

Oracle データベースグローバルユーザー/ロール

Oracle データベースユーザー/ロール権限

アプリ登録: Enterprise_Reporting_App;

ユーザー: APP_REPORTS_SVC@ent.com

アプリの役割: Reporting_AR;

割り当て: APP_REPORTS_SVC → レポート_AR

'AZURE_USER=APP_REPORTS_SVC@ent.com' としてグローバルに識別されるユーザー APP_REPORTS_SVC を作成します

'AZURE_ROLE= Reporting _AR' としてグローバルに識別されるロール REPORTING_ROLE を作成します。

Reporting_* テーブルに対する SELECT 権限を APP_REPORTS_SVC に付与する

 


3. 代理フロー(OBO)

ユースケースとシナリオ

営業部長のジョンが、生のトランザクション データを一切公開せずに価値の高い AI 主導の洞察を生成する Oracle APEX アプリケーションである Sales Forecast Portal にログインして 1 日を始めるというシナリオを想像してみましょう。

このシナリオでは、予測ポータルは次の 2 つの架空の API に依存します。

  • ForecastService 呼び出し (トークン #1)

ジョンがEntra IDでサインインすると、ポータルは彼のサマリートークンを使用してForecastServiceマイクロサービスを呼び出します。このサービスは、地域成長スコア、解約リスク率、四半期予測といった集計された予測のみを返します。

  • 代理 Exchange → SalesData API (トークン #2)

Johnが「取引の詳細を表示」をクリックすると、ポータルはOBOフローを介してトークン#1をOracleデータベースリソースにスコープ設定された新しいトークンと交換します。トークン#2を取得すると、ポータルはSalesData API(ORDS経由)を呼び出します。このAPIはJohnとしてデータベースに接続し、Johnの地域の生の行のみを返します。

なぜそれが重要なのか

  • 最小権限:サマリー トークンはデータベースをクエリできません。OBO 交換トークンのみが生の行にアクセスできます。
  • エンドツーエンドの ID: John の Entra ID ID はポータルから Oracle に安全に伝播され、すべてのデータ アクセスがユーザー アカウントに対して監査されることが保証されます。

Entra ID ユーザー / グループ / アプリ

Entra ID アプリの役割と割り当て

Oracle データベースグローバルユーザー/ロール

Oracle データベースユーザー/ロール権限

ユーザー: john.doe@ent.com;

グループ: SalesAdmins;

アプリ: SalesDataApp

割り当て:

john.doe@ent.com → 営業管理者

アプリの役割: SalesData_AR;

割り当て: SalesAdmins → SalesData_AR

'AZURE_ROLE=SalesData_AR' としてグローバルに識別されるユーザー SALES_ADMINS を作成します

'AZURE_ROLE=SalesData_AR' としてグローバルに識別されるロール SALES_DATA_ROLE を作成します。

 SALES_ADMINSに CREATE SESSION、CONNECT、RESOURCE 権限を付与します。

SALES_TRANSACTIONS に対する SELECT 権限を SALES_DATA_ROLE に付与します。

 


4. デバイスコードフロー

ユースケースとシナリオ

オンコールDBAチームは、時折、ロックダウンされた要塞ホスト(ブラウザがインストールされていない)にアクセスし、Oracleに対して緊急のヘルスチェッククエリや診断スクリプトを実行する必要があります。Entra ID用に設定されたSQLclを起動し、特別な--devicecodeフラグを入力すると、短いコードとURLが返されます。

$ sql /@prod –devicecode
アクセスhttps://microsoft.com/devicelogin でコード X1Y2Z3 を入力してください

ユーザーはスマートフォンを手に取り、該当のページにアクセスし、企業の認証情報(およびMFA)を入力してリクエストを承認します。一方、SQLclはEntra IDをポーリングし、デバイスコードが確認されるとすぐにOAuthトークンを受信し、DIAG_CLI (サンプル共有スキーマ)としてOracleに接続します。この際、パスワードやSSHキーのスワップといった最小限の診断権限のみが付与されます。

Entra IDユーザー /グループ/ アプリ

Entra IDアプリの役割割り当て

Oracleデータベースグローバルユーザー/ロール

Oracle データベースユーザー/ロール権限

ユーザー: oncall.dba@ent.com ;

グループ: DB_OnCall;

アプリ: SQLCLI_Device

割り当て:

oncall.dba@ent .com → DB_OnCall

アプリロール: DevCode _AR ;

割り当て: DB_OnCall → DevCode _AR

'AZURE_ROLE= DevCode _AR'としてグローバルに識別されるユーザーDIAG_CLIを作成します

'AZURE_ROLE= DevCode_AR' としてグローバルに識別されるロールDIAG_ROLEを作成します。

DIAG_CLI にセッションの作成、接続、リソースの権限を付与します。

  V_$INSTANCE、V_$ SQLに対する SELECT権限をDIAG_ROLEに付与します。

 


最後に

Microsoft Entra ID 経由で OAuth2 で保護された Oracle アクセスを採用することは、単なる新しい機能ではなく、セキュリティ体制を根本的に向上させ、真のマルチクラウド ID 戦略の基盤を築きます

  • 一元化された認証情報管理
    。パスワードや保管庫が分散する必要はもうありません。すべてのトークンはEntra IDによって発行、ローテーション、失効されるため、オンプレミスとクラウドの境界を越えた機密情報の漏洩や古くなるリスクが軽減されます。
  • 有効期間が短く、スコープが限定されたトークン
    。長期間有効なデータベースアカウントの代わりに、最小限の権限しか付与されない一時的なトークンが提供されます。トークンが侵害された場合でも、その有効期間とスコープによって影響範囲が限定されます。
  • エンドツーエンドの ID 伝播
    OBO などのフローでは、まったく同じユーザー ID がブラウザからマイクロサービス、データベースへと移動し、正確なユーザーごとの監査証跡が確保され、不透明な「サービス アカウント」アクセスが排除されます。
  • マルチクラウド対応
    認証と承認を単一のインフラストラクチャから切り離すことで、OCI または Azure をユニバーサル ID プレーンとして使用し、このモデルを AWS、GCP、またはハイブリッド環境に拡張できます。

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

Oracle GoldenGate 23aiでMicrosoft Fabricでのオープン・ミラーリングがサポートされるようになりました (2024/11/19)

OCIサービスを利用したWebサイトの作成 その4~Identity Cloud Serviceでサイトの一部を保護 (2021/12/30)