表ハイパーリンクの生成、管理およびモニター

表ハイパーリンクを生成、管理およびモニターするステップを示します。

表またはビューの表ハイパーリンクの生成

スキーマ・オブジェクト(表またはビュー)のアクセスを共有するために使用できる表ハイパーリンクを生成するステップを示します。

表ハイパーリンクを実行すると、表ハイパーリンクを生成するデータベース・ユーザーに付与された権限が使用されます。表ハイパーリンクを生成するユーザーには、データへのアクセスを提供するために必要な最小限の権限が必要です。セキュリティを維持するために、Oracleでは、ADMINユーザーとしてDBMS_DATA_ACCESS.CREATE_URLを実行しないことをお薦めします。

表ハイパーリンクを使用してデータへのアクセスをスキーマ・オブジェクト(表またはビュー)として提供するには:

  1. 共有する表またはビューを識別します。

    使用可能にするデータに制限がある場合は、application_user_idパラメータを使用して表ハイパーリンクを生成し、公開するデータを制限するVPDポリシーを作成します。詳細は、表ハイパーリンク・データを保護するための仮想プライベート・データベース・ポリシーの定義を参照してください。

  2. DBMS_DATA_ACCESS.CREATE_URLを実行して、表のハイパーリンクを生成します。
    DECLARE
       status CLOB;
       BEGIN
          DBMS_DATA_ACCESS.CREATE_URL(
              schema_name => 'ADMIN',
              schema_object_name    => 'TREE_DATA',
              expiration_minutes    => 360,
              result                => status);
           dbms_output.put_line(status);
        END;
    /

    expiration_minutesパラメータでは、表ハイパーリンクが期限切れになり、360分後に無効化されるように指定します。

    詳細は、CREATE_URLプロシージャを参照してください。

  3. 結果を確認します。

    この例では、statusに、表ハイパーリンクに関する情報を含む結果が含まれています。

    {
    "status":"SUCCESS","id":"wPY0uxyx-gioxOndiKVlqVF585xqJs14CIp9M1qH",
    "preauth_url":"https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/-pPLdrbUTcLUrZLExyzxyzabc_1w/data",
    "expiration_ts":"2024-10-22T22:37:18.805Z",
    "expiration_count":null
    }

SELECT文を使用した表ハイパーリンクの生成

SQL問合せ文を使用してデータにアクセスできる表ハイパーリンクを生成するステップを示します。

表ハイパーリンクを実行すると、表ハイパーリンクを生成するデータベース・ユーザーに付与された権限が使用されます。表ハイパーリンクを生成するユーザーには、データへのアクセスを提供するために必要な最小限の権限が必要です。セキュリティを維持するために、Oracleでは、ADMINユーザーとしてDBMS_DATA_ACCESS.CREATE_URLを実行しないことをお薦めします。

任意のSQL問合せ文としてデータへのアクセスを提供するために表ハイパーリンクを使用するには:

  1. 共有する情報を含む表またはビュー、および使用する表またはビューのSELECT文を特定します。

    使用可能にするデータに制限がある場合は、application_user_idパラメータを使用して表ハイパーリンクを生成し、公開するデータを制限するVPDポリシーを作成します。詳細は、表ハイパーリンク・データを保護するための仮想プライベート・データベース・ポリシーの定義を参照してください。

  2. DBMS_DATA_ACCESS.CREATE_URLを実行して、表のハイパーリンクを生成します。

    デフォルトのバインド変数値を含めるかどうか(select文にバインド変数を含める場合)に応じて、2つのオプションがあります。

    1. select文を指定し、オプションのdefault_bind_valuesパラメータを使用しないでください。

      たとえば:

      DECLARE
         status CLOB;
         BEGIN
            DBMS_DATA_ACCESS.CREATE_URL(
                sql_statement        => 'SELECT species, height FROM TREE_DATA',
                expiration_minutes   => 360,
                result               => status);
             dbms_output.put_line(status);
          END;
      /
      sql_statement値はSELECT文である必要があります。SELECT文では、バインド変数がサポートされています。select文にバインド変数が含まれている場合は、データにアクセスするときに、生成された表ハイパーリンクに問合せパラメータとしてバインド変数値を追加する必要があります。
    2. SELECT文を指定し、default_bind_valuesパラメータを含めます。

      たとえば:

      DECLARE
         status CLOB;
         BEGIN
            DBMS_DATA_ACCESS.CREATE_URL(
                sql_statement => 'select * FROM TREE_DATA WHERE COUNTY = :countyNAME',
                default_bind_values  => '{"countyNAME" : "First"}',
                expiration_minutes   => 360,
                result               => status);
             dbms_output.put_line(status);
          END;
      /

      sql_statementパラメータは、SELECT文である必要があります。SELECT文では、バインド変数がサポートされています。

      default_bind_valuesパラメータは、sql_statement内の1つ以上のバインド変数の値を指定します。default_bind_valuesDBMS_DATA_ACCESS.CREATE_URLに含まれている場合:

      • default_bind_valuesで指定されたバインド変数の場合は、データにアクセスするときにバインド変数の値を省略できます。データにアクセスする際に、表ハイパーリンクURLに問合せパラメータとして上書きが指定されていない場合、指定したバインド変数にデフォルト値が使用されます。

      • データにアクセスするときに表のハイパーリンクURLにバインド変数値を問合せパラメータとして追加すると、default_bind_valuesで指定されたデフォルトのバインド変数値をオーバーライドできます。

      • SELECT文にバインド変数が含まれていて、バインド変数のデフォルト値がdefault_bind_valuesパラメータに指定されていない場合は、データにアクセスするときに、生成された表のハイパーリンクURLに問合せパラメータとしてバインド変数値を追加する必要があります。

    バインド変数のサポートは、NUMBERおよびVARCHAR2列タイプで使用できます。

    これらの例では、expiration_minutesパラメータは、表ハイパーリンクが失効し、360分後に無効化されるように指定します。

  3. 結果を確認します。

    この例では、statusに表ハイパーリンクを含む結果が含まれています。

    {
    "status":"SUCCESS","id":"LCvtpALqZgcHGL4Lxyzabcxyza-QVEFngwh1UGhg8jjuFAHOQJLGFi",
    "preauth_url":"https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/RIabc_xyz7Kw8ZLyZ2JzCXZQXpc/data",
    "expiration_ts":"2025-01-20T16:42:49.527Z"}
    }

列に指定されたUI機能を使用した表ハイパーリンクの生成

表ハイパーリンクを生成する場合は、column_listsパラメータを使用して、指定した列のUI機能を指定できます。

column_listsパラメータは、列ごとにオプションを指定するJSON値です。column_listsでサポートされている値は、次のうち1つ以上です。

column_lists値 説明
order_by_columns

ソートをサポートする列を指定します。列はJSON配列で指定されます。

filter_columns

フィルタリングをサポートする列を指定します。列はJSON配列で指定されます。

default_color_columns

指定した列にデフォルトの色のみを使用することを指定します。列はJSON配列で指定されます。

group_by_columns

指定した列に対してグループ化基準を許可することを指定します(指定した列をグループ化してデータを表示することは許可されます)。列はJSON配列で指定されます。

表ハイパーリンクの表ビュー列レベルのUI機能を指定するには:

  1. 共有する表またはビューまたはSELECT文を指定します。

    この例では、表とともにcolumn_listsパラメータを使用して表ハイパーリンクを生成します。このパラメータは、SELECT文を使用して表ハイパーリンクを生成する場合にも使用できます。

    詳細は、表またはビューの表ハイパーリンクの生成およびSELECT文を使用した表ハイパーリンクの生成を参照してください。

  2. DBMS_DATA_ACCESS.CREATE_URLを実行して表ハイパーリンクを生成し、ブラウザで表示するための列別グループ・オプションを指定します。

    たとえば、列によるグループ化を指定するには:

    DECLARE
       status CLOB;
       BEGIN
          DBMS_DATA_ACCESS.CREATE_URL(
              schema_name => 'ADMIN',
              schema_object_name    => 'TREE_DATA',
              expiration_minutes    => 360,
              column_lists          => '{ "group_by_columns": ["COUNTY", "SPECIES"] }',
              result                => status);
    
           dbms_output.put_line(status);
        END;
    /

    column_listsパラメータは、表のハイパーリンク機能を定義する列のJSON配列のリストを含むJSONです。このパラメータを使用して、1つ以上のオプション(order_by_columnsfilter_columnsdefault_color_columnsまたはgroup_by_columns)の列を指定します。

    たとえば:

    column_lists => '{ 
            "group_by_columns":["COUNTY", "SPECIES"], 
            "order_by_columns":["COUNTY"] }'

    詳細は、CREATE_URLプロシージャを参照してください。

  3. 結果を確認します。

    この例では、statusに、表ハイパーリンクに関する情報を含む結果が含まれています。

    {
    "status":"SUCCESS",
    "id":"LLUZjJ5Yy8d0txydMiuxCVL_j4abc_xyzV1989GmgRInaBYTw",
    "preauth_url":"https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/Rt_yRfTxbcabc_xyzWlANP5RmM9Y/data",
    "expiration_ts":"2024-10-25T02:30:39.810Z",
    "expiration_count":null
    }

    列ごとのグループ化の使用例については、表ハイパーリンクを使用した表形式のグループ化オプションを使用したデータへのアクセスを参照してください。

  4. DBMS_DATA_ACCESS.CREATE_URLを実行して表ハイパーリンクを生成し、UI書式オプションを指定します。

    たとえば、ソート可能な列を設定するには、column_lists order_by_columnsオプションを使用します。

    DECLARE
       status CLOB;
       column_lists CLOB;
       BEGIN
          DBMS_DATA_ACCESS.CREATE_URL(
              schema_name => 'ADMIN',
              schema_object_name    => 'TREE_DATA',
              expiration_minutes    => 360,
              column_lists          => '{ "order_by_columns": ["COUNTY", "SPECIES"] }',
              result                => status);
           dbms_output.put_line(status);
        END;
    /

    column_listsパラメータは、表のハイパーリンク機能を定義する列のJSON配列のリストを含むJSONです。このパラメータを使用して、1つ以上のオプション(order_by_columnsfilter_columnsdefault_color_columnsまたはgroup_by_columns)の列を指定します。

    詳細は、CREATE_URLプロシージャを参照してください。

  5. 結果を確認します。

    この例では、statusに、表ハイパーリンクに関する情報を含む結果が含まれています。

    {
    "status":"SUCCESS",
    "id":"LLUZjJ5Yy8d0txydMiuxCVL_j4abc_xyzV1989GmgRInaBYTw",
    "preauth_url":"https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/Rt_yRfTxbcabc_xyzk3EmM9Y/data",
    "expiration_ts":"2024-10-25T02:30:39.810Z",
    "expiration_count":null
    }

    列の順序の使用例については、「列ソートによる表形式での表のハイパーリンクの使用」を参照してください。

また、次のこともできます:

  • DBMS_DATA_ACCESS.LIST_ACTIVE_URLSを使用して、表のハイパーリンクを表示します。詳細は、表ハイパーリンクおよび表ハイパーリンク・グループのリストを参照してください。
  • DBMS_DATA_ACCESS.EXTEND_URLを使用して、表ハイパーリンクの存続期間を延長します。詳細は、EXTEND_URLプロシージャを参照してください。
  • サービス・レベルの保証とリソースが異なる表ハイパーリンクを生成します。たとえば、オブジェクトまたはSQL文へのアクセスはサービスHIGHまたはMEDIUMにマップできますが、別のオブジェクトまたはSQL文へのアクセスはLOWサービスにマップできます。詳細は、CREATE_URLプロシージャを参照してください。

表ハイパーリンクの無効化

適切な権限を持つユーザーは、いつでも表ハイパーリンクを無効にできます。

表のハイパーリンクを無効にするには、表ハイパーリンクidが必要です。DBMS_DATA_ACCESS.LIST_ACTIVE_URLSを使用して、表ハイパーリンクおよび関連するidのリストを生成します。

DBMS_DATA_ACCESS.INVALIDATE_URLを使用して、表のハイパーリンクを無効化します。たとえば:

DECLARE
    status CLOB;
    BEGIN
       DBMS_DATA_ACCESS.INVALIDATE_URL(
        id => 'Vd1Px7QWASdqDbnndiuwTAyyEstv82PCHqS_example',
        result => status);           
       dbms_output.put_line(status);
    END;
/

DBMS_DATA_ACCESS.INVALIDATE_URLを使用して、表ハイパーリンク・グループを無効にすることもできます。

詳細は、表のハイパーリンク・グループの無効化およびINVALIDATE_URLプロシージャを参照してください。

表のハイパーリンク・データを保護するための仮想プライベート・データベース・ポリシーの定義

表ハイパーリンクと共有するデータに対してOracle Virtual Private Database (VPD)ポリシーを定義することで、特定の表ハイパーリンクに対してデータのサブセット(行)のみが表示されるように、きめ細かいアクセス制御を提供できます。

Oracle Virtual Private Database (VPD)は、同じデータ・セットにフィルタを適用することで、ユーザーおよびアプリケーションの行レベルでデータ・アクセスを動的に制御できるセキュリティ機能です。表ハイパーリンクにアクセスすると、表ハイパーリンクの生成時に指定されたapplication_user_idの値は、sys_context('DATA_ACCESS_CONTEXT$', 'USER_IDENTITY')を介して使用できます。このアプリケーション・コンテキストの値を使用するVPDポリシーを定義して、アプリケーション・ユーザーに表示されるデータ、行を制限できます。

表ハイパーリンクを使用してデータを読み取るためのアクセス権を付与されたユーザーは、データ(表、ビューまたはselect文で提供されるデータ)にアクセスして使用できます。表ハイパーリンクを生成したデータベースでVPDポリシーを定義することで、SYS_CONTEXTルールのapplication_user_id値を使用して、より詳細な制御を提供できます。表ハイパーリンクでデータが使用可能になった例を考えてみます。一部のデータへのアクセスを制限する場合は、VPDポリシーを追加できます。

たとえば:

  1. 表ハイパーリンクの生成時に指定したapplication_user_id値を取得します。
  2. 表ハイパーリンクを生成したデータベースでVPDポリシーを作成します。
    CREATE OR REPLACE FUNCTION limit_sal (v_schema IN VARCHAR2, v_objname IN VARCHAR2)
      RETURN VARCHAR2 authid current_user AS
    BEGIN
         RETURN 'employee_id = SYS_CONTEXT(''DATA_ACCESS_CONTEXT$'', ''USER_IDENTITY'')';
    END;
    

    詳細は、DBMS_RLSを参照してください。

  3. VPDポリシーを登録します。
    BEGIN
       DBMS_RLS.ADD_POLICY( 
            object_schema        => 'HR',
            object_name          => 'EMPLOYEE',
            policy_name          => 'POL',
            policy_function      => 'LIMIT_SAL');
    END;
    /

    詳細は、DBMS_RLSを参照してください。

表ハイパーリンク使用状況のモニターおよび表示

Autonomous Databaseには、表ハイパーリンクの使用状況をモニターできるビューが用意されています。

ビュー 説明
V$DATA_ACCESS_URL_STATSおよびGV$DATA_ACCESS_URL_STATSビュー

これらのビューは、経過時間、CPU時間、追加情報など、表ハイパーリンクの使用状況を追跡します。

表ハイパーリンクの作成に関するノート

DBMS_DATA_ACCESS.CREATE_URLを使用した表ハイパーリンクの生成に関するノート:

  • オプションのservice_nameパラメータを使用して、生成された表ハイパーリンクを特定のサービス・レベルの保証およびリソースでサービスするように指定できます。たとえば、service_nameパラメータを使用して、SQL文へのアクセスがHIGHサービスにマップされるように指定します。

  • 表のハイパーリンク・データへのアクセスを制限する場合は、オプションのinherit_aclパラメータを使用できます。ACLを継承するには、このパラメータをTRUEに設定します。このパラメータの値がTRUEの場合、受信表ハイパーリンク・コンシューマのIPアドレスは、データへのアクセスを許可する前に、プロデューサ・データベースのACLで検証されます。プロデューサ・データベースにACLが構成されていない場合、inherit_acl値は無視され、ACLチェックなしでデータ・アクセスが許可されます。

    詳細は、アクセス制御ルール(ACL)を使用したネットワーク・アクセスの構成を参照してください。

  • プライベート・エンドポイントを含むAutonomous Databaseインスタンスに表ハイパーリンクを生成すると、結果にはprivate_preauth_urlという名前が"https://private-endpoint/adb/p/parurl-token/data"という形式の値とともに含まれます。

    プライベート・エンドポイントを含むAutonomous Databaseインスタンスに表ハイパーリンクを生成し、プライベート・エンドポイントが「パブリック・アクセスの許可」を有効にして構成されている場合、結果にはパブリック・エンドポイントのpreauth_urlprivate_preauth_urlの両方が含まれます。

    詳細は、プライベート・エンドポイントの構成およびパブリック・アクセスが許可されたプライベート・エンドポイントの使用を参照してください。

  • DBMS_DATA_ACCESS.LIST_ACTIVE_URLSを使用して、表のハイパーリンクを表示します。詳細は、表ハイパーリンクおよび表ハイパーリンク・グループのリストを参照してください。

  • DBMS_DATA_ACCESS.EXTEND_URLを使用して、表ハイパーリンクの存続期間を延長します。詳細は、EXTEND_URLプロシージャを参照してください。