Llamada a servicios web desde una base de datos de IA autónoma
Describe las opciones para llamar a los servicios web desde la base de datos de IA autónoma.
Hay una serie de opciones para llamar a servicios web desde la base de datos de IA autónoma, incluidas las siguientes:
-
Utilice las API de REST
DBMS_CLOUD: la funciónDBMS_CLOUD.SEND_REQUESTinicia una solicitud HTTP, obtiene la respuesta y finaliza la respuesta. Esta función proporciona un flujo de trabajo para enviar una solicitud de API de REST en la nube con argumentos y la función devuelve un código de respuesta y una carga útil. Consulte SEND_REQUEST Función y procedimiento para obtener más información. -
Utilice Oracle APEX: puede interactuar con servicios web de estilo SOAP y RESTful desde APEX en su instancia de base de datos de IA autónoma. Consulte Uso de servicios web con Oracle APEX para obtener más información.
-
Utilice
UTL_HTTPpara enviar una solicitud a un sitio público: consulte Envío de una Solicitud HTTP a un Host Público para obtener más información. -
Utilice
UTL_HTTPpara enviar una solicitud a un sitio privado: consulte Envío de una solicitud HTTP a un host privado para obtener más información.Cuando la instancia de la base de datos de IA autónoma está en un punto final privado, puede utilizar una cartera gestionada por el cliente con los procedimientos
UTL_HTTP,DBMS_LDAP,UTL_SMTPoUTL_TCP. Consulte Realización de llamadas externas mediante una cartera gestionada por el cliente para obtener más información.
Consulte las Notas del paquete PL/SQL para la base de datos de IA autónoma para obtener información sobre las restricciones para UTL_HTTP en la base de datos de IA autónoma.
Temas
- Envío de una solicitud HTTP a un host público
Proporciona detalles sobre el uso deUTL_HTTPpara enviar una solicitud HTTP en un host público. - Envío de una Solicitud HTTP a un Host Privado
Describe los pasos para utilizarUTL_HTTPpara enviar una solicitud HTTP en un host privado. - Envío de una solicitud HTTP a un sitio privado con un proxy
Cuando la instancia de base de datos de IA autónoma está en un punto final privado, puede utilizar un proxy para enviar solicitudes HTTP conUTL_HTTP. - Uso de Objetos de Credenciales para Definir la Autenticación HTTP
Describe cómo transferir objetos de credenciales al procedimientoUTL_HTTP.SET_CREDENTIAL. - Notas para enviar solicitudes HTTP con Oracle APEX o Database Actions
Al utilizar los comandos SQL de Oracle APEX o la hoja de trabajo SQL de Database Actions para ejecutar varios comandos SQL secuenciales, los comandos se pueden ejecutar en diferentes sesiones de base de datos que no guardan el estado de una sentencia anterior. Este comportamiento difiere de los clientes SQL de escritorio, como SQL*Plus y SQL Developer, que mantienen una conexión persistente a la base de datos. - Envío de cabeceras de red de identidad de base de datos para solicitudes HTTP salientes
Puede configurar la base de datos de IA autónoma para que envíe información de identidad de base de datos como cabeceras HTTP personalizadas al realizar solicitudes HTTP salientes.
Tema principal: Tareas
Envío de una Solicitud HTTP a un Host Público
Proporciona detalles sobre el uso de UTL_HTTP para enviar una solicitud HTTP en un host público.
Por ejemplo, para enviar una solicitud HTTP para un host público www.example.com, cree una lista de control de acceso para el host:
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'www.example.com',
ace => xs$ace_type( privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db));
END;A continuación, envíe la solicitud HTTP:
SELECT UTL_HTTP.REQUEST(url => 'https://www.example.com/') FROM dual;Si la instancia de la base de datos de IA autónoma está en un punto final privado y desea que las llamadas
UTL_HTTP a hosts públicos estén sujetas a las reglas de salida de la VCN del punto final privado, defina la propiedad de la base de datos ROUTE_OUTBOUND_CONNECTIONS.
Consulte Seguridad mejorada para conexiones salientes con puntos finales privados para obtener más información.
Consulte las Notas del paquete PL/SQL para la base de datos de IA autónoma para obtener información sobre las restricciones para UTL_HTTP en la base de datos de IA autónoma.
Tema principal: Llamada a servicios web desde una base de datos de IA autónoma
Envío de una solicitud HTTP a un host privado
Describe los pasos para utilizar UTL_HTTP para enviar una solicitud HTTP en un host privado.
Para enviar una solicitud a un host de destino en un punto final privado, se debe poder acceder al host de destino desde la VCN de Oracle Cloud Infrastructure de la base de datos de origen. Por ejemplo, puede conectarse al host de destino cuando:
-
Tanto la base de datos de origen como el host de destino están en la misma VCN de Oracle Cloud Infrastructure.
-
La base de datos de origen y el host de destino se encuentran en distintas redes virtuales en la nube de Oracle Cloud Infrastructure que están emparejadas.
-
El host de destino es una red local que está conectada a la VCN de Oracle Cloud Infrastructure de la base de datos origen mediante FastConnect o una VPN.
También puede realizar llamadas UTL_HTTP con una cartera gestionada por el cliente cuando su base de datos de IA autónoma está en un punto final privado. Consulte Realización de llamadas externas mediante una cartera gestionada por el cliente para obtener más información.
Para realizar una solicitud UTL_HTTP a un destino en un punto final privado:
-
Cree una lista de control de acceso para el host.
Por ejemplo:
BEGIN DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE( host => 'www.example.com', ace => xs$ace_type( privilege_list => xs$name_list('http'), principal_name => 'ADMIN', principal_type => xs_acl.ptype_db), private_target => TRUE); END; /Como se muestra en este ejemplo, al crear una lista de control de acceso para el host, especifique el parámetro
private_targetcon el valorTRUE.Nota
Si define la propiedad de base de datosROUTE_OUTBOUND_CONNECTIONS, no es necesario definir el parámetroprivate_targetenTRUEen esta API. Consulte Seguridad mejorada para conexiones salientes con puntos finales privados para obtener más información. -
Envíe la solicitud HTTP:
SELECT UTL_HTTP.REQUEST( url => 'https://www.example.com/', https_host => 'www.example.com') FROM dual;
Consulte las Notas del paquete PL/SQL para la base de datos de IA autónoma para obtener información sobre las restricciones para UTL_HTTP en la base de datos de IA autónoma.
Tema principal: Llamada a servicios web desde una base de datos de IA autónoma
Enviar una solicitud HTTP a un sitio privado con un proxy
Cuando su instancia de base de datos de IA autónoma está en un punto final privado, puede utilizar un proxy para enviar solicitudes HTTP con UTL_HTTP.
Cuando la instancia de la base de datos de IA autónoma está en un punto final privado, para utilizar UTL_HTTP con un proxy de destino, se debe poder acceder al proxy de destino desde la VCN de Oracle Cloud Infrastructure de la base de datos de origen.
Por ejemplo, puede conectarse mediante un proxy cuando:
-
Tanto la base de datos de origen como el servidor proxy están en la misma VCN de Oracle Cloud Infrastructure.
-
La base de datos de origen y el servidor proxy se encuentran en distintas redes virtuales en la nube de Oracle Cloud Infrastructure que están emparejadas.
-
El servidor proxy es una red local que está conectada a la VCN de Oracle Cloud Infrastructure de la base de datos origen mediante FastConnect o VPN.
También puede realizar llamadas UTL_HTTP mediante una cartera gestionada por el cliente. Consulte Realización de llamadas externas mediante una cartera gestionada por el cliente para obtener más información.
Para utilizar un servidor proxy con UTL_HTTP:
Notas para definir un servidor proxy con UTL_HTTP.SET_PROXY:
-
Las solicitudes
DBMS_CLOUDno respetan el servidor proxy definido conUTL_HTTP.SET_PROXY. Esto incluyeDBMS_CLOUD.SEND_REQUESTy todo el acceso de almacenamiento de objetos para las tablas externasDBMS_CLOUDque defina conDBMS_CLOUD.CREATE_EXTERNAL_TABLE,DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEoDBMS_CLOUD.CREATE_HYBRID_PART_TABLE. -
Las solicitudes
APEX_WEB_SERVICEno respetan el servidor proxy definido conUTL_HTTP.SET_PROXY.
Consulte las Notas del paquete PL/SQL para la base de datos de IA autónoma para obtener información sobre las restricciones para UTL_HTTP en la base de datos de IA autónoma.
Tema principal: Llamada a servicios web desde una base de datos de IA autónoma
Uso de Objetos de Credenciales para Definir la Autenticación HTTP
Describe cómo transferir objetos de credenciales al procedimiento UTL_HTTP.SET_CREDENTIAL.
El procedimiento UTL_HTTP.SET_CREDENTIAL define la información de autenticación HTTP en la cabecera de solicitud HTTP. El servidor web necesita esta información para autorizar la solicitud.
El procedimiento UTL_HTTP.SET_CREDENTIAL permite transferir objetos de credenciales para definir la autenticación HTTP. Los objetos de credenciales son objetos de esquema, por lo que solo pueden acceder a ellos los usuarios con privilegios y le permiten configurar privilegios de nivel de esquema para controlar el acceso a las credenciales. La transferencia de objetos de credenciales es una forma adecuada y segura de almacenar y gestionar el nombre de usuario, la contraseña o las claves que se van a utilizar para la autenticación.
El procedimiento UTL_HTTP.SET_CREDENTIAL es una alternativa segura y conveniente al procedimiento UTL_HTTP.SET_AUTHENTICATION.
Ejemplo
...
UTL_HTTP.SET_AUTHENTICATION (l_http_request, 'web_app_user', 'xxxxxxxxxxxx');
...Como se muestra en el ejemplo anterior, al llamar al procedimiento SET_AUTHENTICATION, debe transferir el nombre de usuario/contraseña en texto no cifrado como parte de los parámetros formales PL/SQL. Puede que necesite embeber el nombre de usuario/contraseña en varios scripts cron o automatización PL/SQL. La transferencia de contraseñas de texto no cifrado es un problema de conformidad que se aborda en el procedimiento UTL_HTTP.SET_CREDENTIAL.
Consulte Procedimiento SET_AUTHENTICATION y Procedimiento SET_AUTHENTICATION_FROM_WALLET para obtener más información.
Sintaxis de UTL_HTTP.SET_CREDENTIAL
UTL_HTTP.SET_CREDENTIAL (
r IN OUT NOCOPY req,
credential IN VARCHAR2,
scheme IN VARCHAR2 DEFAULT 'Basic',
for_proxy IN BOOLEAN DEFAULT FALSE);Ejemplo para transferir un objeto de credencial en el procedimiento SET_CREDENTIAL:
-
Cree un objeto de credencial:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'HTTP_CRED', username => 'web_app_user', password => '<password>' ); END;Esto crea un objeto de credencial que crea un par de nombre de usuario/contraseña almacenado.
Consulte CREATE_CREDENTIAL Procedure para obtener más información.
Consulte Especificación de Credenciales de Trabajo del Planificador para obtener más información.
-
Llame al procedimiento
UTL_HTTP.SET_CREDENTIAL:DECLARE l_http_request UTL_HTTP.REQ; BEGIN l_http_request := UTL_HTTP.BEGIN_REQUEST('https://www.example.com/v1/dwcsdev/NAME/dwcs_small_xt1.csv'); UTL_HTTP.SET_CREDENTIAL (l_http_request, 'HTTP_CRED','BASIC'); ... END;En este ejemplo, primero se crea una solicitud llamando al procedimiento
BEGIN_REQUESTy se define la información de autenticación HTTP en la cabecera de solicitud HTTP llamando al procedimientoSET_CREDENTIAL. El servidor web necesita esta información para autorizar la solicitud. El valorl_http_requestes la solicitud HTTP,HTTP_CREDes el nombre de las credenciales yBASICes el esquema de autenticación HTTP.
Consulte UTL_HTTP para obtener más información.
Consulte las Notas del paquete PL/SQL para la base de datos de IA autónoma para obtener información sobre las restricciones para UTL_HTTP en la base de datos de IA autónoma.
Tema principal: Llamada a servicios web desde una base de datos de IA autónoma
Notas para el envío de solicitudes HTTP con Oracle APEX o Database Actions
Al utilizar los comandos SQL de Oracle APEX o la hoja de trabajo SQL de Database Actions para ejecutar varios comandos SQL secuenciales, los comandos se pueden ejecutar en diferentes sesiones de base de datos que no guardan el estado de una sentencia anterior. Este comportamiento difiere de los clientes SQL de escritorio, como SQL*Plus y SQL Developer, que mantienen una conexión persistente a la base de datos.
Los envíos de hojas de trabajo SQL de comandos SQL y acciones de base de datos de Oracle APEX a una instancia de base de datos de IA autónoma no tienen estado. Esto significa que la ejecución de sentencias SQL y PL/SQL individuales puede ahorrar estado en la memoria de la base de datos, por ejemplo, al ejecutar un comando para utilizar una cartera, pero el estado se puede borrar antes de ejecutar la siguiente sentencia.
Consulte la siguiente tabla para ver los pasos para mantener el estado de la memoria de la base de datos entre ejecuciones de sentencias para los comandos SQL que envíe a la base de datos de IA autónoma.
| Herramienta de comandos SQL | Enviar sentencias como bloque |
|---|---|
| Hoja de trabajo SQL de Database Actions |
|
| Comandos SQL de Oracle APEX |
Los comandos SQL de APEX solo soportan la ejecución de sentencias individuales. Cuando desea ejecutar varias sentencias, debe encapsular las sentencias en un único bloque anónimo PL/SQL. Para ejecutar el bloque con los comandos SQL de APEX, haga clic en Run. |
Por ejemplo, utilice el siguiente bloque de código para ejecutar un comando utl_http.request() que utilice una cartera gestionada por el cliente:
SELECT utl_http.request(url => 'https://api.example.com/', wallet_path => 'file:path_to_wallet', wallet_password => 'password' ) FROM DUAL";Compare esto con la ejecución con dos sentencias consecutivas que podrían fallar si el comando utl_http.set_wallet() y la sentencia utl_http.request() se ejecutan de forma individual, en lugar de como un único bloque de código:
EXEC utl_http.set_wallet('file:WALLET_DIR/wallet.sso', 'password');
SELECT utl_http.request('https://api.example.com/') FROM DUAL;Tema principal: Llamada a servicios web desde una base de datos de IA autónoma
Enviar cabeceras de red de identidad de base de datos para solicitudes HTTP salientes
Puede configurar su base de datos de IA autónoma para que envíe información de identidad de base de datos como cabeceras HTTP personalizadas al realizar solicitudes HTTP salientes.
Acerca de las Cabeceras de Red de Identidad de Base de Datos
Las cabeceras de red de identidad de base de datos permiten enviar información de identificación específica de la base de datos (como database name, region, tenancy OCID, database OCID, compartment OCID, cloud domain y client IP address) como cabeceras HTTP personalizadas con solicitudes HTTP salientes. Esto permite a los puntos finales remotos identificar el origen de las solicitudes entrantes.
La cabecera de red de identidad de base de datos extrae todos sus campos de Cloud Identity. La base de datos de IA autónoma mantiene un objeto de identidad en la nube para cada base de datos, que incluye metadatos como nombre de base de datos, nombre de región, OCID de arrendamiento, OCID de base de datos y OCID de compartimento. Oracle configura los campos de identidad para cada base de datos. Puede verlo en las vistas de base de datos V$PDBS. No obstante, no se puede modificar.
Con la cabecera de red de identidad de base de datos, ha mejorado la seguridad. Los puntos finales remotos pueden validar la base de datos de origen y restringir el acceso solo a las bases de datos autorizadas. Por defecto, debe configurar explícitamente qué campos de identidad incluir y qué dominios pueden recibir estas cabeceras.
Configurar cabeceras de red de identidad de base de datos
Para cada solicitud UTL_HTTP saliente, la base de datos envía automáticamente una cabecera HTTP (por ejemplo, X-ADB-Source-Database) cuyo valor es un documento JSON con campos de identidad seleccionados como database name, region, tenancy OCID, database OCID, compartment OCID, cloud domain y client IP address.
DATABASE_IDENTITY_NETWORK_HEADERS: especifica los campos de identidad que se van a incluir en la cabecera HTTP personalizada.DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS: especifica qué dominios pueden recibir estas cabeceras.
Requisitos
Debe configurar las ACL de red para permitir el acceso HTTP saliente a los dominios de destino.
Definición de Campos de Identidad para Incluir en Cabeceras HTTP
La propiedad DATABASE_IDENTITY_NETWORK_HEADERS controla qué campos de identidad de base de datos se envían como parte de la cabecera HTTP personalizada X-ADB-Source-Database.
Para configurar campos de identidad:
DATABASE_IDENTITY_NETWORK_HEADERS en una matriz de JSON que contenga uno o más de los siguientes campos:
DATABASE_NAME: nombre de la base de datos de IA autónomaREGION: región de Oracle Cloud Infrastructure donde se encuentra la base de datosTENANT_OCID: identificador de Oracle Cloud (OCID) del arrendamientoDATABASE_OCID: OCID de la base de datos de IA autónomaCOMPARTMENT_OCID: OCID del compartimento que contiene la base de datosCLOUD_DOMAIN: dominio en la nube de la base de datosCLIENT_IP_ADDRESS: dirección IP desde la que se estableció la sesión de usuario
database name, region y database OCID:ALTER DATABASE PROPERTY SET DATABASE_IDENTITY_NETWORK_HEADERS = '[
"DATABASE_NAME",
"REGION",
"DATABASE_OCID"
]';ALTER DATABASE PROPERTY SET DATABASE_IDENTITY_NETWORK_HEADERS = '[
"DATABASE_NAME",
"REGION",
"TENANT_OCID",
"DATABASE_OCID",
"COMPARTMENT_OCID",
"CLOUD_DOMAIN",
"CLIENT_IP_ADDRESS"
]';Notas de uso:
- Si define esta propiedad en
null, la API no envía los campos de identidad. Este valor es por defecto. - Los nombre de campo no son sensible a mayúsculas/minúsculas.
- Al especificar valores o nombres de campo no válidos, se devuelve el error
ORA-60565.
Especificar dominios permitidos
La propiedad DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS controla qué dominios pueden recibir cabeceras de identidad de base de datos.
Para configurar dominios permitidos:
DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS con uno de los siguientes valores:
- Un solo asterisco (*) para enviar cabeceras a todos los dominios
- Una lista separada por comas de nombres de dominio específicos
ALTER DATABASE PROPERTY SET DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS = '*';ALTER DATABASE PROPERTY SET DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS = 'objectstorage.oraclecloud.com';ALTER DATABASE PROPERTY SET DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS = 'oraclecloud.com, example.com';Notas de uso:
- La coincidencia de dominio se basa en la coincidencia de sufijos exactos. Por ejemplo, la especificación de oracle.cloud.com coincide con api.oraclecloud.com, objectstorage.oraclecloud.com y cualquier otro subdominio de oraclecloud.com.
- Los patrones comodín (como *.oraclecloud.com) no se admiten.
- Si define esta propiedad en nula, la API no envía los campos de identidad. Este valor se define por defecto.
- Las cabeceras se envían solo cuando se configuran
DATABASE_IDENTITY_NETWORK_HEADERSyDATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS.
Formato de cabecera HTTP
Cuando se configuran las cabeceras de red de identidad de base de datos, la base de datos agrega automáticamente la cabecera personalizada X-ADB-Source-Database a las solicitudes HTTP salientes realizadas mediante el paquete UTL_HTTP.
X-ADB-Source-Database=
{"databaseName":"MYDATABASENAME",
"region":"region_identifier",
"tenantOcid":"tenant_ocid",
"databaseOcid":"database_ocid",
"compartmentOcid":"compartment_ocid",
"clientIpAddress":"client_ip_address"}La cabecera X-ADB-Source-Database la rellena automáticamente el núcleo de la base de datos y no se puede modificar ni definir explícitamente mediante las API UTL_HTTP.
No se puede definir esta cabecera. Si lo intenta, el sistema devuelve un error.
Recibirá un error ORA-60565: Invalid value for DATABASE_IDENTITY_NETWORK_HEADERS property si se especifica un valor no válido para la propiedad DATABASE_IDENTITY_NETWORK_HEADERS. El valor debe ser una matriz JSON que contenga uno o más nombres de campo válidos y no debe superar los 4000 bytes.
Tema principal: Llamada a servicios web desde una base de datos de IA autónoma