Générer, gérer et surveiller des liens hypertexte de table

Présente les étapes de génération, de gestion et de surveillance des liens hypertexte de table.

Générer un lien hypertexte de table pour une table ou une vue

Présente les étapes de génération d'un lien hypertexte de table que vous pouvez utiliser pour partager l'accès à un objet de schéma (table ou vue).

Lorsqu'un lien hypertexte de table est exécuté, il utilise les privilèges accordés à l'utilisateur de base de données qui génère le lien hypertexte de table. L'utilisateur qui génère un lien hypertexte de table doit disposer des privilèges minimum requis pour fournir l'accès aux données. Pour maintenir la sécurité, Oracle recommande de ne pas exécuter DBMS_DATA_ACCESS.CREATE_URL en tant qu'utilisateur ADMIN.

Pour utiliser un lien hypertexte de table afin de permettre l'accès aux données en tant qu'objet de schéma (table ou vue), procédez comme suit :

  1. Identifiez la table ou la vue à partager.

    Si des restrictions s'appliquent aux données que vous souhaitez rendre disponibles, utilisez le paramètre application_user_id lorsque vous générez le lien hypertexte de table et créez une stratégie VPD pour restreindre les données que vous affichez. Pour plus d'informations, reportez-vous à Définition d'une stratégie de base de données privée virtuelle pour sécuriser les données de lien hypertexte de table.

  2. Exécutez DBMS_DATA_ACCESS.CREATE_URL pour générer le lien hypertexte de table.
    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;
    /

    Le paramètre expiration_minutes indique que le lien hypertexte de table expire et est invalidé au bout de 360 minutes.

    Pour plus d'informations, reportez-vous à Procédure CREATE_URL.

  3. Vérifiez le résultat.

    Dans cet exemple, status contient le résultat qui inclut des informations sur le lien hypertexte de table.

    {
    "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
    }

Générer un lien hypertexte de table avec une instruction Select

Présente les étapes de génération d'un lien hypertexte de table qui permet d'accéder aux données à l'aide d'une instruction de requête SQL.

Lorsqu'un lien hypertexte de table est exécuté, il utilise les privilèges accordés à l'utilisateur de base de données qui génère le lien hypertexte de table. L'utilisateur qui génère un lien hypertexte de table doit disposer des privilèges minimum requis pour fournir l'accès aux données. Pour maintenir la sécurité, Oracle recommande de ne pas exécuter DBMS_DATA_ACCESS.CREATE_URL en tant qu'utilisateur ADMIN.

Pour utiliser un lien hypertexte de table permettant d'accéder aux données en tant qu'instruction de requête SQL arbitraire, procédez comme suit :

  1. Identifiez la table ou la vue contenant les informations à partager, ainsi que l'instruction SELECT sur la table ou la vue à utiliser.

    Si des restrictions s'appliquent aux données que vous souhaitez rendre disponibles, utilisez le paramètre application_user_id lorsque vous générez le lien hypertexte de table et créez une stratégie VPD pour restreindre les données que vous affichez. Pour plus d'informations, reportez-vous à Définition d'une stratégie de base de données privée virtuelle pour sécuriser les données de lien hypertexte de table.

  2. Exécutez DBMS_DATA_ACCESS.CREATE_URL pour générer le lien hypertexte de table.

    Vous disposez de deux options, selon que vous souhaitez inclure des valeurs de variable attachée (bind variables) par défaut (si vous incluez des variables attachées dans l'instruction SELECT).

    1. Fournissez une instruction SELECT et n'utilisez pas le paramètre facultatif default_bind_values.

      Exemples :

      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;
      /
      La valeur sql_statement doit être une instruction SELECT. L'instruction SELECT prend en charge les variables attachées. Si des variables attachées sont incluses dans l'instruction SELECT, les valeurs des variables attachées doivent être ajoutées au lien hypertexte de table généré en tant que paramètre de requête lors de l'accès aux données.
    2. Fournissez une instruction SELECT et incluez le paramètre default_bind_values.

      Exemples :

      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;
      /

      Le paramètre sql_statement doit être une instruction SELECT. L'instruction SELECT prend en charge les variables attachées.

      Le paramètre default_bind_values indique des valeurs pour une ou plusieurs variables attachées dans sql_statement. Lorsque default_bind_values est inclus dans DBMS_DATA_ACCESS.CREATE_URL, procédez comme suit :

      • Pour les variables attachées indiquées dans default_bind_values, vous pouvez omettre les valeurs des variables attachées lorsque vous accédez aux données. La valeur par défaut est utilisée pour une variable attachée spécifiée si aucun remplacement n'est fourni dans l'URL du lien hypertexte de table en tant que paramètre de requête lorsque vous accédez aux données.

      • Vous pouvez remplacer une valeur de variable attachée par défaut indiquée dans default_bind_values si vous ajoutez la valeur de variable attachée dans l'URL de lien hypertexte de table en tant que paramètre de requête lorsque vous accédez aux données.

      • Si une variable attachée est incluse dans l'instruction SELECT et qu'aucune valeur par défaut n'est indiquée pour la variable attachée dans le paramètre default_bind_values, vous devez ajouter une valeur de variable attachée à l'URL de lien hypertexte de table générée en tant que paramètre de requête lorsque vous accédez aux données.

    La prise en charge des variables attachées est disponible pour les types de colonne NUMBER et VARCHAR2.

    Dans ces exemples, le paramètre expiration_minutes indique que le lien hypertexte de table expire et est invalidé après 360 minutes.

  3. Vérifiez le résultat.

    Dans cet exemple, status contient le résultat qui inclut le lien hypertexte de table.

    {
    "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"}
    }

Générer un lien hypertexte de table avec les fonctions d'interface utilisateur indiquées sur les colonnes

Lorsque vous générez un lien hypertexte de table, vous pouvez utiliser le paramètre column_lists pour indiquer les fonctionnalités d'interface utilisateur pour les colonnes indiquées.

Le paramètre column_lists est une valeur JSON qui indique les options par colonne. Les valeurs prises en charge dans column_lists sont les suivantes :

Valeur column_lists Description
order_by_columns

Spécifie les colonnes qui prennent en charge le tri. Les colonnes sont indiquées dans un tableau JSON.

filter_columns

Spécifie les colonnes qui prennent en charge le filtrage. Les colonnes sont indiquées dans un tableau JSON.

default_color_columns

Spécifie d'utiliser uniquement la coloration par défaut pour les colonnes spécifiées. Les colonnes sont indiquées dans un tableau JSON.

group_by_columns

Indique que le regroupement est autorisé pour les colonnes spécifiées (l'affichage des données en regroupant la colonne spécifiée est autorisé). Les colonnes sont indiquées dans un tableau JSON.

Pour spécifier les fonctions d'interface utilisateur de niveau colonne de vue de table pour un lien hypertexte de table :

  1. Identifiez la table ou la vue ou sélectionnez l'instruction à partager.

    Cet exemple génère un lien hypertexte de table à l'aide du paramètre column_lists avec une table. Vous pouvez également utiliser ce paramètre lorsque vous générez un lien hypertexte de table avec une instruction SELECT.

    Pour plus d'informations, reportez-vous à Générer un lien hypertexte de table pour une table ou une vue et à Générer un lien hypertexte de table avec une instruction Select.

  2. Exécutez DBMS_DATA_ACCESS.CREATE_URL pour générer le lien hypertexte de table et indiquez l'option Grouper par colonnes à afficher avec un navigateur :

    Par exemple, pour indiquer des colonnes de regroupement :

    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;
    /

    Le paramètre column_lists est un fichier JSON qui contient la liste des tableaux JSON de colonnes définissant la fonctionnalité de lien hypertexte de table. Utilisez ce paramètre pour indiquer les colonnes pour une ou plusieurs des options : order_by_columns, filter_columns, default_color_columns ou group_by_columns.

    Par exemple :

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

    Pour plus d'informations, reportez-vous à Procédure CREATE_URL.

  3. Vérifiez le résultat.

    Dans cet exemple, status contient le résultat qui inclut des informations sur le lien hypertexte de table.

    {
    "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
    }

    Reportez-vous à Utilisation des liens hypertexte de table pour accéder aux données avec l'option Grouper par dans le format de table pour obtenir un exemple montrant l'utilisation des colonnes de regroupement.

  4. Exécutez DBMS_DATA_ACCESS.CREATE_URL pour générer le lien hypertexte de table et indiquez une option de format d'interface utilisateur.

    Par exemple, pour définir les colonnes pouvant être triées, utilisez l'option 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;
    /

    Le paramètre column_lists est un fichier JSON qui contient la liste des tableaux JSON de colonnes définissant la fonctionnalité de lien hypertexte de table. Utilisez ce paramètre pour indiquer les colonnes pour une ou plusieurs des options : order_by_columns, filter_columns, default_color_columns ou group_by_columns.

    Pour plus d'informations, reportez-vous à Procédure CREATE_URL.

  5. Vérifiez le résultat.

    Dans cet exemple, status contient le résultat qui inclut des informations sur le lien hypertexte de table.

    {
    "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
    }

    Reportez-vous à la section Use Table Hyperlinks in Table Format with Column Sorting pour obtenir un exemple illustrant l'utilisation de l'ordre par colonne.

Vous pouvez également :

  • Utilisez DBMS_DATA_ACCESS.LIST_ACTIVE_URLS pour afficher les liens hypertexte de table. Pour plus de détails, reportez-vous à Liste des liens hypertexte de table et des groupes de liens hypertexte de table.
  • Utilisez DBMS_DATA_ACCESS.EXTEND_URL pour prolonger la durée de vie d'un lien hypertexte de table. Pour plus d'informations, reportez-vous à Procédure EXTEND_URL.
  • Générez des liens hypertexte de table qui sont traités avec des garanties et des ressources de niveau de service différentes. Par exemple, l'accès à un objet ou à une instruction SQL peut être mis en correspondance avec les services HIGH ou MEDIUM, tandis que l'accès à un autre objet ou à une autre instruction SQL peut être mis en correspondance avec le service LOW. Pour plus d'informations, reportez-vous à Procédure CREATE_URL.

Invalider les liens hypertexte de table

A tout moment, un utilisateur disposant des privilèges appropriés peut invalider un lien hypertexte de table.

Pour invalider un lien hypertexte de table, vous avez besoin du lien hypertexte de table id. Utilisez DBMS_DATA_ACCESS.LIST_ACTIVE_URLS pour générer la liste des liens hypertexte de table et des liens id associés.

Utilisez DBMS_DATA_ACCESS.INVALIDATE_URL pour invalider un lien hypertexte de table. Exemples :

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

Vous pouvez également utiliser DBMS_DATA_ACCESS.INVALIDATE_URL pour invalider un groupe de liens hypertexte de table.

Pour plus d'informations, reportez-vous à Invalidate a Table Hyperlink Group et à INVALIDATE_URL Procedure.

Définir une stratégie de base de données privée virtuelle pour sécuriser les données de lien hypertexte de table

En définissant des stratégies Oracle Virtual Private Database (VPD) pour les données que vous partagez avec un lien hypertexte de table, vous pouvez fournir un contrôle d'accès de niveau fin afin que seul un sous-ensemble de données (lignes) soit visible pour un lien hypertexte de table spécifique.

Oracle Virtual Private Database (VPD) est une fonctionnalité de sécurité qui vous permet de contrôler l'accès aux données de manière dynamique au niveau ligne pour les utilisateurs et les applications en appliquant des filtres sur le même ensemble de données. Lorsque vous accédez à un lien hypertexte de table, la valeur application_user_id indiquée lors de la génération du lien hypertexte de table est disponible via sys_context('DATA_ACCESS_CONTEXT$', 'USER_IDENTITY'). Vous pouvez définir des stratégies VPD qui utilisent la valeur de ce contexte d'application pour restreindre la visibilité des données et des lignes pour l'utilisateur de l'application.

Tout utilisateur disposant d'un accès en lecture de données avec un lien hypertexte de table peut accéder aux données et les utiliser (une table, une vue ou les données fournies avec une instruction SELECT). En définissant une stratégie VPD sur la base de données qui a généré un lien hypertexte de table, vous pouvez utiliser la valeur application_user_id dans une règle SYS_CONTEXT pour fournir un contrôle plus précis. Prenons un exemple où les données sont rendues disponibles avec un lien hypertexte de table. Si vous souhaitez restreindre l'accès à certaines données, vous pouvez ajouter une stratégie VPD.

Par exemple :

  1. Obtenez la valeur application_user_id que vous avez indiquée lorsque vous avez généré le lien hypertexte de table.
  2. Créez une stratégie VPD sur la base de données dans laquelle vous avez généré le lien hypertexte de table.
    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;
    

    Pour plus d'informations, reportez-vous à DBMS_RLS.

  3. Enregistrez la stratégie VPD.
    BEGIN
       DBMS_RLS.ADD_POLICY( 
            object_schema        => 'HR',
            object_name          => 'EMPLOYEE',
            policy_name          => 'POL',
            policy_function      => 'LIMIT_SAL');
    END;
    /

    Pour plus d'informations, reportez-vous à DBMS_RLS.

Surveiller et afficher l'utilisation des liens hypertexte de table

Autonomous Database fournit des vues qui vous permettent de surveiller l'utilisation des liens hypertexte de table.

vues Description
Vues V$DATA_ACCESS_URL_STATS et GV$DATA_ACCESS_URL_STATS

Ces vues permettent de suivre l'utilisation des liens hypertexte de table, notamment le temps écoulé, le temps CPU et des informations supplémentaires.

Remarques sur la création d'un lien hypertexte de table

Remarques concernant la génération d'un lien hypertexte de table avec DBMS_DATA_ACCESS.CREATE_URL :

  • Vous pouvez utiliser le paramètre facultatif service_name pour indiquer que le lien hypertexte de table généré est traité avec une garantie et des ressources de niveau de service spécifiques. Par exemple, utilisez le paramètre service_name pour indiquer que l'accès à l'instruction SQL est mis en correspondance avec le service HIGH.

  • Vous pouvez utiliser le paramètre facultatif inherit_acl pour limiter l'accès aux données de lien hypertexte de table. Définissez ce paramètre sur TRUE pour hériter des listes de contrôle d'accès. Lorsque la valeur de ce paramètre est TRUE, l'adresse IP d'un destinataire de lien hypertexte de table entrant est validée avec les listes de contrôle d'accès de la base de données du producteur avant d'autoriser l'accès aux données. Si aucune liste de contrôle d'accès n'est configurée pour la base de données du fournisseur, la valeur inherit_acl est ignorée et l'accès aux données est autorisé sans aucune vérification d'ACL.

    Pour plus d'informations, reportez-vous à Configuration de l'accès réseau avec des règles de contrôle d'accès (ACL).

  • Lorsque vous générez un lien hypertexte de table sur une instance Autonomous Database avec une adresse privée, le résultat inclut le nom private_preauth_url avec la valeur du format : "https://private-endpoint/adb/p/parurl-token/data".

    Lorsque vous générez un lien hypertexte de table sur une instance Autonomous Database avec une adresse privée et que l'adresse privée est configurée avec l'option Autoriser l'accès public activée, le résultat inclut à la fois preauth_url pour l'adresse publique et private_preauth_url.

    Pour plus d'informations, reportez-vous à Configuration d'adresses privées et à Utilisation d'une adresse privée avec accès public autorisé.

  • Utilisez DBMS_DATA_ACCESS.LIST_ACTIVE_URLS pour afficher les liens hypertexte de table. Pour plus de détails, reportez-vous à Liste des liens hypertexte de table et des groupes de liens hypertexte de table.

  • Utilisez DBMS_DATA_ACCESS.EXTEND_URL pour prolonger la durée de vie d'un lien hypertexte de table. Pour plus d'informations, reportez-vous à Procédure EXTEND_URL.