主要な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フローのいずれかを選択できます。
以下に、各フローの実際のシナリオと、Entra 側と Oracle 側の両方でプロビジョニングするユーザー、グループ、アプリ ロール、スキーマ、データベース ロールの詳細を示します。
1. 認可コードフロー
ユースケースとシナリオ
Acme 社の運用チームを想像してください。運用アナリストと運用 DBA の 2 つのグループはどちらも SQL Developer を使用して同じ Oracle スキーマを操作しますが、それぞれ異なるレベルのアクセスが必要です。
どちらのグループもSQL Developerを開き、Entra ID認証を選択すると、企業の認証情報でサインインします(必要に応じてMFAも完了します)。Entra IDは、グループクレームとアプリロールクレームを含むOAuthアクセストークンを発行します。Oracleはこれらのクレームを読み取り、次のようにマッピングします。
このアプローチにより、シームレスなシングル サインオン、ジャストインタイムの権限昇格 (別の DBA アカウントを覚える必要はありません)、エンドツーエンドの監査可能性が実現します。すべてのクエリと管理アクションは、実際の Entra ID ユーザーに対して記録されます。
なぜそれが重要なのか
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 ユーザー / グループ / アプリ | 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 に依存します。
ジョンがEntra IDでサインインすると、ポータルは彼のサマリートークンを使用してForecastServiceマイクロサービスを呼び出します。このサービスは、地域成長スコア、解約リスク率、四半期予測といった集計された予測のみを返します。
Johnが「取引の詳細を表示」をクリックすると、ポータルはOBOフローを介してトークン#1をOracleデータベースリソースにスコープ設定された新しいトークンと交換します。トークン#2を取得すると、ポータルはSalesData API(ORDS経由)を呼び出します。このAPIはJohnとしてデータベースに接続し、Johnの地域の生の行のみを返します。
なぜそれが重要なのか
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 戦略の基盤を築きます。
コメント
コメントを投稿