表のハイパーリンクの作成、管理および監視

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

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

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

表ハイパーリンクを実行すると、表ハイパーリンクを生成するデータベース・ユーザーに付与された権限が使用されます。表ハイパーリンクを生成するユーザーには、データへのアクセスを提供するために必要な最小限の権限が必要です。セキュリティを維持するために、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 => 'SCOTT',
              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-gioxOndiKVlqVF585xqJs14CIp9M1qHd-m8bqJi-QCahwfwGesG",
      "preauth_url" : "https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/Y0uxyx-gioxOndiKVlqVF585xqJs14CIp9M1qHhVJUCWm5OEG3fNq2m0HCjaMt8s/data",
      "expiration_ts" : "2025-08-12T04:30:41.484Z"
    }

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

SQL問合せ文を使用したデータへのアクセスを提供する表ハイパーリンクを作成するステップを示します。

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

表のハイパーリンクを使用して、任意のSQL問合せ文としてデータにアクセスできるようにするには:

  1. 共有する情報を含む表またはビューと、使用する表またはビューのSELECT文を識別します。

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

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

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

    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/GL4Lxyzabcxyza-QVEFngwh1UGhg8n4GfPaHCgdGoLJl-V1tTUxMDgdQ/data",
      "expiration_ts" : "2025-08-12T04:33:40.162Z"
    }

列に指定されている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 => 'SCOTT',
              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_xyzV198nGw-3yFYctMNm1p3atJr",
      "preauth_url" : "https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/-P46uQtYRt_yRfTxbcabc_xyzWlANP5RmM9Ys/data",
      "expiration_ts" : "2025-08-12T04:37:22.190Z"
    }
    

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

  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 => 'SCOTT',
              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" : "tCz2IRLIaDDymwOe1o105WQMGtyw4Z_0mGwfbv0ARcjI5SPkzR_xyz_abceyMgV",
      "preauth_url" : "https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/yfWQoyYxyz_abcGxQnCx0trQhH72m0HCjaMt8s/data",
      "expiration_ts" : "2025-08-12T04:41:05.115Z"
    }

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

また、次の操作を行うこともできます。

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

パスワード保護表のハイパーリンクの作成

表ハイパーリンクを作成する場合、表ハイパーリンクのパスワードを指定できます。

ユーザーがパスワードで保護された表ハイパーリンクにアクセスする場合は、表ハイパーリンクの作成時に指定されたパスワードを使用して認証する必要があります。これにより、表ハイパーリンクが意図したよりも広いオーディエンスに公開される場合に、悪意のあるアクセスを回避するための追加のセキュリティ・ステップが提供されます。

パスワードで保護された表のハイパーリンクを作成するには:

  1. 共有するデータの表、ビューまたは問合せ文を識別します。

    パスワードで保護された表ハイパーリンクまたは表ハイパーリンク・グループを指定できます。

  2. 表ハイパーリンクまたは表ハイパーリンク・グループを作成する場合は、passwordパラメータを指定します。

    たとえば:

    DECLARE
       status CLOB;
       BEGIN
          DBMS_DATA_ACCESS.CREATE_URL(
              schema_name => 'SCOTT',
              schema_object_name          => 'TREE_DATA',
              password                    => passwd,
              max_failed_access_attempts  => 15,
              result                      => status);
           dbms_output.put_line(status);
        END;
    /

    passwordパラメータは、表ハイパーリンク(または表ハイパーリンク・グループ)へのアクセスに必要なパスワードを指定します。パスワードに加えて、表ハイパーリンクに適用されるすべてのセキュリティ保護(有効期限や有効期限数など)も、パスワードで保護された表ハイパーリンクに適用されます。

    max_failed_access_attemptsパラメータは、パスワード試行の連続失敗の最大数を指定します。この値を超えると、表ハイパーリンクが無効になります。このパラメータのデフォルト値は10です。ユーザーが正しいパスワードを入力すると、連続して失敗したアクセス試行の数を追跡するためのカウントが0にリセットされます。

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

  3. 結果を確認します。

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

    {
      "status" : "SUCCESS",
      "id" : "wPY0uxyx-gioxOndiKVlqVF585xqJs14CIp9M1qHabc_1",
      "url" : "https://dataaccess.adb.us-ashburn-1.oraclecloudapps.com/adb/p/-pPLdrbUTcLUr1XetvO0tekak4p92m0HCjaMt8s/data",
      "expiration_ts" : "2025-11-06T22:41:14.779Z"
    }

DBMS_DATA_ACCESS.CREATE_URLpasswordパラメータを含める場合は、次の点に注意してください。

  • 結果には、表ハイパーリンクURL値を含むurl属性が含まれます。passwordパラメータを指定しない場合、結果属性はpreauth_urlになります。この違いにより、パスワードで保護された表のハイパーリンクを区別できます。

  • パスワードの最小長は12文字で、パスワードには少なくとも1つの大文字、1つの小文字および1つの数字を含める必要があります。これらのルールは、NULL PVF (パスワード検証関数)に関連付けられているデータベース・ユーザーのパスワード複雑性ルールに適用されるルールと同じです。パスワード・パラメータを指定してCREATE_URLが呼び出され、指定されたパスワードがこれらのルールに準拠していない場合(たとえば、パスワードが12文字より短い場合)、URLの作成はエラーで失敗します。

    詳細は、Autonomous Databaseでのパスワードの複雑度の管理を参照してください。

  • パスワードの設定後にパスワードを変更またはリセットするオプションはありません。CREATE_URLを実行した後で保存していない場合、または設定したパスワードを記憶できない場合は、新しい表ハイパーリンクを作成する必要があります。

  • パスワードで保護された表ハイパーリンクのパスワードと、URLを作成するユーザーのパスワードとの間には関連付けはありません。ユーザーSCOTTCREATE_URLを使用してパスワードで保護された表ハイパーリンクを作成した場合、作成される表ハイパーリンクURLのパスワードとユーザーSCOTTのパスワードは関連付けられません。

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

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

表のハイパーリンクを無効にするには、表ハイパーリンク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パラメータのいずれかまたは両方を使用できます。

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

    • acl: オプションのaclパラメータを使用して、表ハイパーリンクに適用されるACLを指定します。パラメータ値は、許可されるIPアドレス、CIDRブロックまたはOCI VCN OCIDsのリストを指定します。aclパラメータが指定されている場合、表ハイパーリンク・コンシューマは、ACLで指定されたホストのデータにのみアクセスできます。

    inherit_aclTRUEで、aclパラメータがACLを指定するように設定されている場合、表ハイパーリンク・コンシューマは、aclパラメータで指定されたホスト、またはAutonomous Databaseインスタンスに指定されたACLで定義された継承ホストから、表ハイパーリンクのデータにアクセスできます。

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

  • オプションのパラメータconsistentTRUEに設定すると、表ハイパーリンク・プロデューサは、異なるページ間で一貫してデータを生成します。これにより、コンシューマは、最初のページのアクセスに関連付けられたSCNと同じデータ・スナップショット(SCN)を使用して、表ハイパーリンクに関連付けられているすべてのページのデータにアクセスできます。このオプションを使用すると、プロデューサは一貫性のあるデータをコンシューマに返すことができます。コンシューマでは、レスポンスがページ区切りされ、複数のページが返されます(データはページごとに返され、アクセスされます)。

    consistentTRUEに設定され、表ハイパーリンクが別のユーザーのスキーマのスキーマ・オブジェクトを参照する場合、表ハイパーリンクを作成するデータベース・ユーザーは、他のユーザーのスキーマに属する表ハイパーリンクで使用されるすべてのスキーマ・オブジェクトに対するFLASHBACK権限を持っている必要があります。

    たとえば:

    GRANT FLASHBACK ON TREE_SCHEMA.TREE_DATA TO SCOTT;

    ノート: データベース・アクティビティが大量にあり、最初のページの取得と後続のページの取得の間に十分な時間が経過すると、最初のアクセスと一致する後続のデータを取得できない場合があります。この場合、取得はエラーになります。

    詳細は、「表ハイパーリンクまたは表ハイパーリンク・グループを使用したデータへのアクセス」を参照してください。

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

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

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

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

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