データベース・ツールを使用するためのベスト・プラクティス

この項では、データベース・ツールをより簡単かつ効率的に使用できる手順およびプラクティスについて説明します。

トピック:

コンパートメントの使用

データベース接続は、特定のユーザーまたは定義されたユーザー・グループにデータベースへのアクセス権を付与する場合に役立つ機能です。これらの接続を分離するには、次の例に示すように、ポリシーを使用してユーザーのロールに基づいて特定の接続へのアクセス権を付与します:

レポートに使用されるAutonomous Data Warehouseの場合は、ReportingDataAccessという名前の共有データベース接続を作成します。この接続を、Data Scientistsというグループ内の特定のエンド・ユーザーのセットに割り当てます。このグループのユーザーは、データベース接続の詳細にアクセスできるようになりましたが、この接続のみの使用と、接続でデータベースへのアクセスに使用されている、ユーザーによって継承されたロールおよび権限に限定されます。

データ・ウェアハウスへの管理者接続を作成し、DatabaseAdministratorsというグループを使用してその接続に別のユーザー・セットを割り当てることもできます。コンパートメントとポリシーを使用すると、次のようにこれらの接続へのアクセスを分離できます:

データ・サイエンティスト・グループ:

  1. Reportingというコンパートメントを作成します。
  2. このコンパートメントにDataScientistsというグループを作成します。
  3. ReportingコンパートメントにReportingDataAccessというデータベース接続を作成します。
  4. Reportingコンパートメント内の接続へのアクセス権をDataScientistsグループに付与するポリシーを作成します:
    • Allow group DataScientists to read database-tools-family in compartment Reporting
    • Allow group DataScientists to use database-tools-connections in compartment Reporting

データベース管理者グループ:

  1. DBAというコンパートメントを作成します。
  2. このコンパートメントにDatabaseAdministratorsというグループを作成します。
  3. DBAコンパートメントにDatabaseAdminというデータベース接続を作成します。
  4. DBAコンパートメント内の接続へのアクセス権をそのグループに付与するポリシーを作成します:
    • Allow group DatabaseAdministrators to read database-tools-family in compartment DBA
    • Allow group DatabaseAdministrators to use database-tools-connections in compartment DBA

これらのグループおよびコンパートメント固有のデータベース接続は、どのユーザーがどのデータベースにアクセスできるかを特定し、それらのユーザーが持つアクセス権を判別するのに役立ちます。

プライベート・エンドポイントの使用

プライベート・エンドポイントを使用しているAutonomous Databaseへのデータベース接続を作成する場合は、データベース・ツールからそのデータベースへのアクセスを提供するネットワーク・セキュリティ・グループを作成します。ネットワーク・セキュリティ・グループの作成時に、使用できるIPまたはCIDRブロック、およびポートまたはポート範囲を制限する特定のアクセス・ルールを定義します。

SQLワークシートの場合

OCIコンソールでデータベース・ツールSQLワークシートからのアクセスを提供するために必要なネットワーク・セキュリティ・グループ・ルールの最小セットを構成するには:

  1. 「プライベート・エンドポイントの詳細」ページで、「プライベート・エンドポイントの情報」セクションの「逆接続ソースIP」フィールドを特定します。IPアドレスは2つあります。
  2. ネットワーク・セキュリティ・グループを編集し、TCP/IPを使用して宛先ポート1522へのアクセス権を持つ2つのIPアドレス用のルールを追加します。たとえば、2つのIPアドレス10.0.1.6および10.0.1.8の場合、2つのルールには、TCP/IPを使用して宛先ポート1522にアクセスできるCIDRブロック10.0.1.6/32および10.0.1.8/32が含まれます。

SQLclおよび要塞の場合

OCIコンソールで要塞を使用してデータベース・ツールSQLclからのアクセスを提供するために必要なネットワーク・セキュリティ・グループ・ルールの最小セットを構成するには:

  1. 「要塞の詳細」ページの「プライベート・エンドポイントIPアドレス」フィールドで、プライベート・エンドポイントIPアドレス項目を特定します。1つのIPアドレスのみが表示されます。
  2. ネットワーク・セキュリティ・グループを編集し、TCP/IPを使用して宛先ポート1522にアクセスできるこのIPアドレス用のルールを追加します。たとえば、IPアドレス10.0.1.9の場合、ルールには、TCP/IPを使用して宛先ポート1522にアクセスできるCIDRブロック10.0.1.7/32が含まれます。

これらのルールにより、データベース・ツールは、これらの特定のIPアドレスからネットワーク・セキュリティ・グループを介して選択したAutonomous Databaseのみに対して、SQLclを使用した要塞アクセスおよびOCIコンソールでのSQLワークシート・アクセス用のポート1522でのみアクセスできます。

監査中

アプリケーション・コンテキスト値の監査を構成することで、Oracle Databaseの統合監査証跡を拡張してアプリケーション属性を取得できます。アプリケーション・コンテキスト・ネームスペースには必須属性が移入され、それらの値が統合監査証跡に取得されます。

データベース・ツールで提供されるアプリケーション属性は、次の目的で使用できます。

  • データベース・ツール・サービスを使用してデータベース・アクセスを開始した認証済IAMプリンシパルを識別します。
  • 統合監査証跡レコードをOCI監査イベントに関連付けます。

認証済IAMプリンシパルの識別

統合監査証跡でアプリケーション・コンテキスト属性を取得するには、最初にAUDIT CONTEXTコマンドを実行して、監査レコードに含める追加属性を指定する必要があります。

たとえば、次の文は、すべての監査レコードのネームスペースCLIENTCONTEXT属性IAM_PRINCIPAL_OCIDからRESOURCE_COMPARTMENT_OCIDの値を取得します。

AUDIT CONTEXT NAMESPACE CLIENTCONTEXT ATTRIBUTES IAM_PRINCIPAL_OCID,IAM_PRINCIPAL_TYPE, 
IAM_PRINCIPAL_SUB_TYPE,IAM_PRINCIPAL_RESOURCE_TYPE,IAM_PRINCIPAL_TENANCY_OCID, 
OPC_REQUEST_ID,RESOURCE_OCID,RESOURCE_COMPARTMENT_OCID

属性を追加した後、次の文を使用して、統合監査証跡で取得されるアプリケーション・コンテキスト属性を確認できます。

SELECT * FROM AUDIT_UNIFIED_CONTEXTS;

データベース・ツール・サービスによってUNIFIED_AUDIT_TRAILに移入された監査レコードは、次の列に関する情報を提供します。

表10-1監査列

OS_USERNAME IAM認証済プリンシパル識別子が切り捨てられる可能性があります
CLIENT_IDENTIFIER IAM認証済プリンシパル識別子の残りの文字
USERHOST 中間層ホスト名
TERMINAL 不明
CLIENT_PROGRAM_NAME データベース・ツールORDS
EXECUTION_ID opc-request-idが64文字で切り捨てられました
APPLICATION_CONTEXTS 表10-2を参照してください。

APPLICATION_CONTEXTS列には、次のCLIENTCONTEXT属性の値が移入されます。これにより、データベース操作を開始した認証済IAMプリンシパルを識別できます。

表10-2 Application_Contexts列

コンテキスト 属性 内容
CLIENTCONTEXT IAM_PRINCIPAL_OCID IAM初期ID
IAM_PRINCIPAL_TENANCY_OCID IAM初期テナンシID
IAM_PRINCIPAL_TYPE

IAM初期タイプ

  • ユーザー
  • リソース
  • インスタンス
  • サービス
IAM_PRINCIPAL_SUB_TYPE

IAMプリンシパル・サブタイプ

  • natv (ネイティブ・ユーザー)
  • natf (ネイティブ・フェデレーテッド・ユーザー)
  • fed (フェデレーテッド・ユーザー)
  • 指定しない
IAM_PRINCIPAL_RESOURCE_TYPE IAMプリンシパル・リソース・タイプ
OPC_REQUEST_ID OPCリクエストID
RESOURCE_OCID リソースID
RESOURCE_COMPARTMENT_OCID リソース・コンパートメントID

統合監査証跡レコードとOCI監査イベントの関連付け

APPLICATION_CONTEXTS列およびEVENT_TIMESTAMPに指定されているOPC_REQUEST_IDおよびRESOURCE_COMPARTMENT_OCID属性を使用すると、統合監査証跡レコードに一致する監査イベントを検索できます。

Oracle Cloud Infrastructureコンソールの使用

  1. コンソールで、ナビゲーション・メニューを開き、「監視および管理」「ロギング」「監査」の順に選択します。
  2. 左ペインで、「コンパートメント」を選択します。
  3. 右側のペインの「カスタム・フィルタ」フィールドに、data.request.id= '<opc-request-id value>'と入力します。
  4. 「時間によるフィルタ」で、ドロップダウン・リストから時間間隔を選択します。
  5. 「適用」を選択します。

    結果は「イベントの参照」タブに表示されます。

コマンドライン・インタフェース(CLI)の使用

統合監査証跡レコードに一致する監査イベントを検索するには、次のスクリプトに<REGION ID><RESOURCE_COMPARTMENT_OCID>および<OPC_REQUEST_ID>を入力します。

#!/bin/sh
 
read -r -d '' body <<EndOfBody
{
  "searchQuery": "search \"<RESOURCE_COMPARTMENT_ID>/_Audit\" | (data.request.id='<OPC_REQUEST_ID>') | sort by datetime desc",
  "timeStart":"2024-07-19T11:03:56.167Z",
  "timeEnd":"2024-07-19T14:03:56.167Z",
  "isReturnFieldInfo":false
}
EndOfBody
 
oci raw-request --target-uri https://logging.<REGION_ID>.oci.oraclecloud.com/20190909/search --http-method POST --request-body "${body}"

IAM認証済セッションの監査

Oracle Database統合監査では、IAMを使用して認証されたセッションの詳細を取得できます。IAM認証の詳細は、IAM認証とデータベース・ツール接続の統合を参照してください。

UNIFIED_AUDIT_TRAILビューでは、外部認証されたセッションに対してIAM関連の識別子が記録されます。たとえば、IAMユーザーのOCIDがEXTERNAL_USERID列に表示される場合があります。

次の問合せの例は、IAM認証済セッションの監査レコードを示しています:

SELECT EXTERNAL_USERID, EVENT_TIMESTAMP, ACTION_NAME 
FROM UNIFIED_AUDIT_TRAIL 
WHERE EXTERNAL_USERID IS NOT NULL;

詳細は、データベース・ツール・サービスの監査および監査によるデータベース・アクティビティの監視を参照してください。

データベース・ツールMCPサーバーの監査

Database Tools MCP Serverは、Oracle Cloud Infrastructure (OCI)監査をOracle Database統合監査と統合することで、エンドツーエンドの監査を提供します。これにより、APIレベルのアクティビティと、データベース内で実行された対応する操作の両方を追跡できます。

OCI監査ログでは、誰がMCPサーバー操作を実行したか、いつ実行したか、データベース監査ではデータベース内で実行されたアクションが取得されます。

MCPサーバーのOCI監査イベント

MCPサーバーは、API操作の実行時にOracle Cloud Infrastructure (OCI) Auditに監査イベントを生成します。これらのイベントは、使用状況の監視と問題のトラブルシューティングに役立ちます。

MCPサーバー操作に対して生成される監査イベントは、InvokeMcpServerです。

各監査イベントには、次の重要なフィールドが含まれます。

プロパティ 摘要
eventType

API操作を識別します。

値は"com.oraclecloud.dbtools-service-mcp.InvokeMcpServer"です

ソース

イベントを実行したサービス。

値は"DatabaseToolsMcp"です

イベントID イベントの一意の識別子
eventTime リクエストが開始された時間。
データ・イベント名

API仕様の工程ID値。

値は"InvokeMcpServer"です

data.compartmentId イベントが発生しているコンパートメントのOCID。
data.compartmentName コンパートメントIDに関連付けられたわかりやすい名前
data.resourceId MCPサーバーのOCID。
データ可用性ドメイン リソースの可用性ドメイン。
data.identity.principalName

このイベントをトリガーしたユーザーまたはサービスの名前。

アクセス・トークン・クレーム:

"sub_type" == "user"、 "user_displayname"の場合

"sub_type" == "client", "client_name"

data.identity.principalId

イベントをトリガーしたユーザーまたはサービスのOCID。

アクセス・トークン・クレーム: "sub"

データ.アイデンティティ.tenantId

テナンシのOCID。

アクセス・トークン・クレーム: "ca_ocid"

data.identity.ipAddress リクエストを実行している実際のユーザーのIPアドレス。
data.identity.authType

ネイティブ、フェデレーテッド、OBO、ServiceToService

値がBearerです

data.request.id リクエストの一意の識別子(opc-request-id)。
data.request.path APIリクエストのフルパス。
データ.リクエスト.アクション GET、PUT、POSTなどのHTTPリクエスト・タイプ。
データ・レスポンス・ステータス APIコールのステータスを示すHTTPレスポンス・コード(例: 200、500)。
data.response. メッセージ

操作結果の説明。

次の例は、MCPサーバー呼び出しの簡易監査ログエントリを示しています。

{
  "eventType": "com.oraclecloud.dbtools-service-mcp.InvokeMcpServer",
  "source": "DatabaseToolsMcp",
  "eventTime": "2026-04-28T10:00:00Z",
  "eventId": "example-event-id",
  "data": {
    "eventName": "InvokeMcpServer",
    "compartmentId": "ocid1.compartment.oc1..example",
    "compartmentName": "ExampleCompartment",
    "resourceId": "ocid1.mcpserver.oc1..example",
    "resourceName": "ExampleMcpServer",
    "availabilityDomain": "Uocm:PHX-AD-1",
    "identity": {
      "principalName": "user@example.com",
      "principalId": "ocid1.user.oc1..example",
      "tenantId": "ocid1.tenancy.oc1..example",
      "ipAddress": "192.0.2.1",
      "authType": "Bearer"
    },
    "request": {
      "action": "POST",
      "path": "/mcp/invoke",
      "id": "example-opc-request-id"
    },
    "response": {
      "status": 200,
      "message": "ExampleMcpServer InvokeMcpServer succeeded"
    }
  }
}

監査イベントには、追加のフィールドが存在する場合があります。完全なスキームについては、OCI Auditのドキュメントを参照してください。

MCPサーバー操作のデータベース監査

データベース・ツールMCPサーバーを使用する場合、データベース操作は認証されたIAMユーザーのかわりに実行され、ユーザー・アイデンティティはCLIENTCONTEXTネームスペースを介してデータベース・セッションに伝播されます。これにより、Oracle Database統合監査では、MCPクライアントを介して開始された操作のユーザーおよびリクエスト・コンテキストを取得できます。

MCPクライアントからデータベース・セッションへのユーザー・アイデンティティの伝播方法の詳細は、「データベース・セッション・アイデンティティとロール伝播」を参照してください。

CLIENTCONTEXT値の監査を構成することで、統合監査証跡を拡張して、これらのアプリケーション・コンテキスト属性を取得できます。これにより、次のことが可能になります。

  • MCPサーバーを介してデータベース操作を開始した認証済IAMプリンシパルを特定します。
  • データベース・アクティビティを特定のMCPサーバーに関連付けてリクエストします。
  • データベース監査レコードをOCI監査イベントに関連付けます。

これらの属性を取得するには、AUDIT CONTEXTコマンドを実行します。

OCI監査ログとデータベース監査ログの関連付け

Database Tools MCP Serverを実行するたびに、OCI監査イベントおよび対応するデータベース監査レコードが生成されます。これらは、共有リクエストおよびアイデンティティ・コンテキストを介してリンクされます。

  • OCI監査ログでdata.request.idとして使用可能なopc-request-idを使用して、MCPクライアント・リクエストをUNIFIED_AUDIT_TRAILで取得されたデータベース監査レコードに関連付けることができます。

  • CLIENTCONTEXTネームスペースを介して伝播されたIAMプリンシパルは、OCI Audit (data.identity.*)に記録されたアイデンティティと一致します。

MCP監査イベントのフィルタリング

MCP関連の監査イベントをフィルタするには、次を使用します。

eventType = "com.oraclecloud.dbtools-service-mcp.InvokeMcpServer"

アイデンティティの使用

関連するアイデンティティ・リソースとの接続の更新

接続が更新されると、ターゲット・データベースまたはスキーマが変更される場合があります。アイデンティティがアタッチされている場合、データベース・ツール・サービスは、新しいターゲット・スキーマおよびデータベースにアイデンティティ・リソースを再作成します。このプロセスは、前のスキーマおよびデータベースに孤立した資格証明を残す場合があります。必要に応じて、資格証明を関連するシノニムまたは権限とともに手動で削除する必要があります。

アイデンティティのリフレッシュに失敗した場合の通知の設定

アイデンティティを使用してクリティカル・タスクを実行している場合は、リフレッシュ操作が失敗した場合に通知を受け取ります。リフレッシュ操作が失敗すると、リソース・プリンシパル・トークンは使用できなくなり、これにより、関連付けられた資格証明がOCI Identity and Access Managementによって認証されなくなります。OCIモニタリングを使用して、リフレッシュ操作が失敗したときに通知を送信するアラームを作成します。アイデンティティの表示および監視を参照してください。

資格証明操作の監査

アイデンティティが作成または更新されると、リソース・プリンシパル・トークンおよび秘密キーの詳細が、対応するデータベース資格証明オブジェクトの生成または変更に使用されます。Oracle Databaseの構成済監査設定によっては、この情報が監査ログに記録される場合があります。「監査の概要」を参照してください。