Chiama Web Services da Autonomous AI Database
Descrive le opzioni per la chiamata dei servizi Web da Autonomous AI Database.
Sono disponibili diverse opzioni per chiamare i servizi Web da Autonomous AI Database, tra cui:
-
Usa API REST
DBMS_CLOUD: la funzioneDBMS_CLOUD.SEND_REQUESTavvia una richiesta HTTP, ottiene la risposta e termina la risposta. Questa funzione fornisce un workflow per l'invio di una richiesta API REST cloud con argomenti e la funzione restituisce un codice di risposta e un payload. Per ulteriori informazioni, vedere SEND_REQUEST Funzione e procedura. -
Utilizzare Oracle APEX: è possibile interagire con i servizi Web in stile SOAP e RESTful di APEX nell'istanza di Autonomous AI Database. Per ulteriori informazioni, vedere Usa servizi Web con Oracle APEX.
-
Utilizzare
UTL_HTTPper sottomettere una richiesta a un sito pubblico. Per ulteriori informazioni, vedere Sottomettere una richiesta HTTP a un host pubblico. -
Utilizzare
UTL_HTTPper inviare una richiesta a un sito privato. Per ulteriori informazioni, vedere Sottomettere una richiesta HTTP a un host privato.Quando l'istanza di Autonomous AI Database si trova su un endpoint privato, è possibile utilizzare un wallet gestito dal cliente con procedure in
UTL_HTTP,DBMS_LDAP,UTL_SMTPoUTL_TCP. Per ulteriori informazioni, vedere Come effettuare chiamate esterne utilizzando un wallet gestito dal cliente.
Consulta le Note sul package PL/SQL per Autonomous AI Database per informazioni sulle limitazioni per UTL_HTTP su Autonomous AI Database.
Argomenti
- Invia una richiesta HTTP a un host pubblico
Fornisce i dettagli per l'utilizzo diUTL_HTTPper sottomettere una richiesta HTTP su un host pubblico. - Sottometti una richiesta HTTP a un host privato
Descrive i passi per utilizzareUTL_HTTPper sottomettere una richiesta HTTP su un host privato. - Invia una richiesta HTTP al sito privato con un proxy
Quando l'istanza di Autonomous AI Database si trova su un endpoint privato, è possibile utilizzare un proxy per sottomettere richieste HTTP conUTL_HTTP. - Utilizzare gli oggetti delle credenziali per impostare l'autenticazione HTTP
Descrive come passare gli oggetti delle credenziali alla proceduraUTL_HTTP.SET_CREDENTIAL. - Note per l'invio di richieste HTTP con Oracle APEX o Database Actions
Quando si utilizza il foglio di lavoro SQL Commands o Database Actions di Oracle APEX per eseguire più comandi SQL sequenziali, i comandi possono essere eseguiti in sessioni di database diverse che non salvano lo stato di un'istruzione precedente. Questo comportamento è diverso dai client SQL desktop, ad esempio SQL*Plus e SQL Developer, che mantengono una connessione persistente al database. - Invia intestazioni di rete di identità del database per le richieste HTTP in uscita
È possibile configurare Autonomous AI Database in modo che invii le informazioni di identità del database come intestazioni HTTP personalizzate durante l'esecuzione di richieste HTTP in uscita.
Argomento padre: Task
Invia una richiesta HTTP a un host pubblico
Fornisce i dettagli per l'utilizzo di UTL_HTTP per sottomettere una richiesta HTTP su un host pubblico.
Ad esempio, per inviare una richiesta HTTP per un host pubblico www.example.com, creare una lista di controllo dell'accesso per l'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;Quindi sottomettere la richiesta HTTP:
SELECT UTL_HTTP.REQUEST(url => 'https://www.example.com/') FROM dual;Se l'istanza di Autonomous AI Database si trova su un endpoint privato e si desidera che le chiamate
UTL_HTTP agli host pubblici siano soggette alle regole di uscita della VCN dell'endpoint privato, impostare la proprietà del database ROUTE_OUTBOUND_CONNECTIONS.
Per ulteriori informazioni, vedere Sicurezza avanzata per le connessioni in uscita con endpoint privati.
Consulta le Note sul package PL/SQL per Autonomous AI Database per informazioni sulle limitazioni per UTL_HTTP su Autonomous AI Database.
Argomento padre: chiamare i servizi Web da Autonomous AI Database
Invia una richiesta HTTP a un host privato
Descrive la procedura per utilizzare UTL_HTTP per inviare una richiesta HTTP su un host privato.
Per sottomettere una richiesta a un host di destinazione su un endpoint privato, l'host di destinazione deve essere accessibile dalla VCN Oracle Cloud Infrastructure del database di origine. Ad esempio, è possibile connettersi all'host di destinazione quando:
-
Sia il database di origine che l'host di destinazione si trovano nella stessa VCN di Oracle Cloud Infrastructure.
-
Il database di origine e l'host di destinazione si trovano in VCN Oracle Cloud Infrastructure diverse abbinate.
-
L'host di destinazione è una rete in locale connessa alla VCN Oracle Cloud Infrastructure del database di origine mediante FastConnect o VPN.
È inoltre possibile effettuare chiamate UTL_HTTP con un wallet gestito dal cliente quando Autonomous AI Database si trova in un endpoint privato. Per ulteriori informazioni, vedere Come effettuare chiamate esterne utilizzando un wallet gestito dal cliente.
Per effettuare una richiesta UTL_HTTP a una destinazione su un endpoint privato, effettuare le operazioni riportate di seguito.
-
Creare una lista di controllo dell'accesso per l'host.
Ad esempio:
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; /Come illustrato in questo esempio, quando si crea una lista di controllo dell'accesso per l'host, specificare il parametro
private_targetcon il valoreTRUE.Nota
Se si imposta la proprietà del databaseROUTE_OUTBOUND_CONNECTIONS, l'impostazione del parametroprivate_targetsuTRUEnon è obbligatoria in questa API. Per ulteriori informazioni, vedere Sicurezza avanzata per le connessioni in uscita con endpoint privati. -
Sottomettere la richiesta HTTP:
SELECT UTL_HTTP.REQUEST( url => 'https://www.example.com/', https_host => 'www.example.com') FROM dual;
Consulta le Note sul package PL/SQL per Autonomous AI Database per informazioni sulle limitazioni per UTL_HTTP su Autonomous AI Database.
Argomento padre: chiamare i servizi Web da Autonomous AI Database
Invia una richiesta HTTP al sito privato con un proxy
Quando l'istanza di Autonomous AI Database si trova su un endpoint privato, è possibile utilizzare un proxy per sottomettere richieste HTTP con UTL_HTTP.
Quando l'istanza di Autonomous AI Database si trova su un endpoint privato, per utilizzare UTL_HTTP con un proxy di destinazione, il proxy di destinazione deve essere accessibile dalla Oracle Cloud Infrastructure VCN del database di origine.
Ad esempio, è possibile connettersi utilizzando un proxy quando:
-
Sia il database di origine che il server proxy si trovano nella stessa VCN di Oracle Cloud Infrastructure.
-
Il database di origine e il server proxy si trovano in VCN Oracle Cloud Infrastructure diverse abbinate.
-
Il server proxy è una rete in locale connessa alla VCN Oracle Cloud Infrastructure del database di origine utilizzando FastConnect o VPN.
È inoltre possibile effettuare chiamate UTL_HTTP utilizzando un wallet gestito dal cliente. Per ulteriori informazioni, vedere Come effettuare chiamate esterne utilizzando un wallet gestito dal cliente.
Per utilizzare un server proxy con UTL_HTTP:
Note per l'impostazione di un server proxy con UTL_HTTP.SET_PROXY:
-
Le richieste
DBMS_CLOUDnon rispettano il server proxy impostato conUTL_HTTP.SET_PROXY. Sono inclusiDBMS_CLOUD.SEND_REQUESTe tutti gli accessi allo storage degli oggetti per le tabelle esterneDBMS_CLOUDdefinite conDBMS_CLOUD.CREATE_EXTERNAL_TABLE,DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLEoDBMS_CLOUD.CREATE_HYBRID_PART_TABLE. -
Le richieste
APEX_WEB_SERVICEnon rispettano il server proxy impostato conUTL_HTTP.SET_PROXY.
Consulta le Note sul package PL/SQL per Autonomous AI Database per informazioni sulle limitazioni per UTL_HTTP su Autonomous AI Database.
Argomento padre: chiamare i servizi Web da Autonomous AI Database
Usa oggetti credenziali per impostare l'autenticazione HTTP
Descrive come passare un oggetto credenziale alla procedura UTL_HTTP.SET_CREDENTIAL.
La procedura UTL_HTTP.SET_CREDENTIAL imposta le informazioni di autenticazione HTTP nell'intestazione della richiesta HTTP. Il server Web necessita di queste informazioni per autorizzare la richiesta.
La procedura UTL_HTTP.SET_CREDENTIAL consente di passare gli oggetti delle credenziali per impostare l'autenticazione HTTP. Gli oggetti delle credenziali sono oggetti dello schema, pertanto è possibile accedervi solo da utenti con privilegi e consentire di configurare privilegi a livello di schema per controllare le credenziali. Il passaggio di oggetti credenziali è un modo appropriato e sicuro per memorizzare e gestire nome utente/password/chiavi da utilizzare per l'autenticazione.
La procedura UTL_HTTP.SET_CREDENTIAL è un'alternativa sicura e conveniente alla procedura UTL_HTTP.SET_AUTHENTICATION.
Esempio
...
UTL_HTTP.SET_AUTHENTICATION (l_http_request, 'web_app_user', 'xxxxxxxxxxxx');
...Come mostrato nell'esempio precedente, quando si richiama la procedura SET_AUTHENTICATION, è necessario passare il nome utente/password in chiaro come parte dei parametri formali PL/SQL. Potrebbe essere necessario incorporare il nome utente/password in vari script di automazione PL/SQL o cron. Il passaggio di password con testo in chiaro è un problema di conformità affrontato nella procedura UTL_HTTP.SET_CREDENTIAL.
Per ulteriori informazioni, vedere SET_AUTHENTICATION Procedure e SET_AUTHENTICATION_FROM_WALLET Procedure.
Sintassi 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);Esempio per passare un oggetto credenziale nella procedura SET_CREDENTIAL:
-
Creare un oggetto credenziale:
BEGIN DBMS_CLOUD.CREATE_CREDENTIAL ( credential_name => 'HTTP_CRED', username => 'web_app_user', password => '<password>' ); END;In questo modo viene creato un oggetto credenziale che crea una coppia di nome utente/password memorizzata.
Per ulteriori informazioni, vedere CREATE_CREDENTIAL Procedure.
Per ulteriori informazioni, vedere Specifica delle credenziali del job scheduler.
-
Richiamare la procedura
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;In questo esempio viene creata una richiesta richiamando la procedura
BEGIN_REQUESTe vengono impostate le informazioni di autenticazione HTTP nell'intestazione della richiesta HTTP richiamando la proceduraSET_CREDENTIAL. Il server Web necessita di queste informazioni per autorizzare la richiesta. Il valorel_http_requestè la richiesta HTTP,HTTP_CREDè il nome delle credenziali eBASICè lo schema di autenticazione HTTP.
Per ulteriori informazioni, vedere UTL_HTTP.
Consulta le Note sul package PL/SQL per Autonomous AI Database per informazioni sulle limitazioni per UTL_HTTP su Autonomous AI Database.
Argomento padre: chiamare i servizi Web da Autonomous AI Database
Note per l'invio di richieste HTTP con Oracle APEX o Database Actions
Quando si utilizza il foglio di lavoro SQL Comandi SQL di Oracle APEX o Database Actions per eseguire più comandi SQL sequenziali, i comandi possono essere eseguiti in sessioni di database diverse che non salvano lo stato di un'istruzione precedente. Questo comportamento è diverso dai client SQL desktop, ad esempio SQL*Plus e SQL Developer, che mantengono una connessione persistente al database.
I comandi SQL di Oracle APEX e le sottomissioni del foglio di lavoro SQL di Database Actions a un'istanza di Autonomous AI Database sono senza conservazione dello stato. Ciò significa che l'esecuzione di singole istruzioni SQL e PL/SQL può salvare lo stato nella memoria del database, ad esempio quando si sottomette un comando per utilizzare un wallet, ma lo stato potrebbe essere cancellato prima di eseguire l'istruzione successiva.
Visualizzare la tabella riportata di seguito per i passi che consentono di mantenere lo stato della memoria del database tra le esecuzioni delle istruzioni per i comandi SQL sottomessi ad Autonomous AI Database.
| Strumento di comando SQL | Sottometti rendiconti come blocco |
|---|---|
| Foglio di lavoro SQL Database Actions |
|
| Comandi SQL di Oracle APEX |
I comandi SQL APEX supportano solo l'esecuzione di singole istruzioni. Quando si desidera eseguire più istruzioni, è necessario racchiudere le istruzioni in un singolo blocco anonimo PL/SQL. Per eseguire il blocco con i comandi SQL APEX, fare clic su Esegui. |
Ad esempio, utilizzare il blocco di codice seguente per eseguire un comando utl_http.request() che utilizza un wallet gestito dal cliente:
SELECT utl_http.request(url => 'https://api.example.com/', wallet_path => 'file:path_to_wallet', wallet_password => 'password' ) FROM DUAL";Confrontare l'esecuzione con due istruzioni consecutive che potrebbero non riuscire se il comando utl_http.set_wallet() e l'istruzione utl_http.request() vengono eseguiti singolarmente, anziché come un singolo blocco di codice:
EXEC utl_http.set_wallet('file:WALLET_DIR/wallet.sso', 'password');
SELECT utl_http.request('https://api.example.com/') FROM DUAL;Argomento padre: chiamare i servizi Web da Autonomous AI Database
Invia intestazioni di rete identità database per richieste HTTP in uscita
È possibile configurare Autonomous AI Database in modo che invii le informazioni di identità del database come intestazioni HTTP personalizzate durante l'esecuzione di richieste HTTP in uscita.
Informazioni sulle intestazioni delle reti di identità del database
Le intestazioni di rete di identità del database consentono di inviare informazioni di identificazione specifiche del database (ad esempio database name, region, tenancy OCID, database OCID, compartment OCID, cloud domain e client IP address) come intestazioni HTTP personalizzate con richieste HTTP in uscita. Ciò consente agli endpoint remoti di identificare l'origine delle richieste in entrata.
L'intestazione della rete di identità del database estrae tutti i campi da Cloud Identity. Autonomous AI Database gestisce un oggetto di identità cloud per ogni database, che include metadati quali il nome del database, il nome dell'area, l'OCID della tenancy, l'OCID del database e l'OCID del compartimento. Oracle configura i campi di identità per ogni database. È possibile visualizzarla nelle viste del database V$PDBS. Tuttavia, non è possibile modificarlo.
Con l'intestazione di rete di identità del database, si dispone di una maggiore sicurezza. Gli endpoint remoti possono convalidare il database di origine e limitare l'accesso solo ai database autorizzati. Per impostazione predefinita, è necessario configurare in modo esplicito i campi di identità da includere e i domini a cui è consentito ricevere queste intestazioni.
Configura intestazioni di rete identità database
Per ogni richiesta UTL_HTTP in uscita, il database invia automaticamente un'intestazione HTTP (ad esempio, X-ADB-Source-Database) il cui valore è un documento JSON con campi di identità selezionati quali database name, region, tenancy OCID, database OCID, compartment OCID, cloud domain e client IP address.
DATABASE_IDENTITY_NETWORK_HEADERS: specifica i campi di identità da includere nell'intestazione HTTP personalizzata.DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS: specifica quali domini sono autorizzati a ricevere queste intestazioni.
Requisiti indispensabili
È necessario configurare le ACL di rete per consentire l'accesso HTTP in uscita ai domini di destinazione.
Impostare i campi di identità da includere nelle intestazioni HTTP
La proprietà DATABASE_IDENTITY_NETWORK_HEADERS controlla quali campi di identità del database vengono inviati come parte dell'intestazione HTTP personalizzata X-ADB-Source-Database.
Per configurare i campi di identità:
DATABASE_IDENTITY_NETWORK_HEADERS su un array JSON contenente uno o più dei campi seguenti:
DATABASE_NAME: il nome di Autonomous AI DatabaseREGION: l'area di Oracle Cloud Infrastructure in cui si trova il databaseTENANT_OCID: l'OCID (Oracle Cloud Identifier) della tenancyDATABASE_OCID: OCID di Autonomous AI DatabaseCOMPARTMENT_OCID: l'OCID del compartimento contenente il databaseCLOUD_DOMAIN: il dominio cloud del databaseCLIENT_IP_ADDRESS: l'indirizzo IP da cui è stata stabilita la sessione utente
database name, region e 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"
]';Note sull'uso:
- Se si imposta questa proprietà su
null, l'API non invia i campi di identità. Per impostazione predefinita, questa opzione è disponibile. - Per i nomi campo viene applicata la distinzione tra maiuscole e minuscole.
- Se si specificano nomi di campo o valori non validi, viene restituito l'errore
ORA-60565.
Specificare i domini consentiti
La proprietà DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS controlla quali domini sono autorizzati a ricevere le intestazioni di identità del database.
Per configurare i domini consentiti:
DATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS su uno dei valori seguenti:
- Un unico asterisco (*) per inviare intestazioni a tutti i domini
- Lista separata da virgole di nomi di dominio specifici
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';Note sull'uso:
- La corrispondenza del dominio si basa sulla corrispondenza esatta del suffisso. Ad esempio, l'impostazione di oracle.cloud.com corrisponde a api.oraclecloud.com, objectstorage.oraclecloud.com e a qualsiasi altro sottodominio di oraclecloud.com.
- I pattern con caratteri jolly (ad esempio *.oraclecloud.com) non sono supportati.
- Se si imposta questa proprietà su null, l'API non invia i campi di identità. Questa è l'impostazione predefinita.
- Le intestazioni vengono inviate solo se sono configurati sia
DATABASE_IDENTITY_NETWORK_HEADERScheDATABASE_IDENTITY_NETWORK_HEADERS_DOMAINS.
Formato intestazione HTTP
Quando le intestazioni di rete di identità del database vengono configurate, il database aggiunge automaticamente l'intestazione personalizzata X-ADB-Source-Database alle richieste HTTP in uscita effettuate utilizzando il package UTL_HTTP.
X-ADB-Source-Database=
{"databaseName":"MYDATABASENAME",
"region":"region_identifier",
"tenantOcid":"tenant_ocid",
"databaseOcid":"database_ocid",
"compartmentOcid":"compartment_ocid",
"clientIpAddress":"client_ip_address"}L'intestazione X-ADB-Source-Database viene popolata automaticamente dal kernel del database e non può essere modificata o impostata in modo esplicito utilizzando le API UTL_HTTP.
Impossibile impostare l'intestazione. Se provi, il sistema restituisce un errore.
Si riceverà un errore ORA-60565: Invalid value for DATABASE_IDENTITY_NETWORK_HEADERS property se viene specificato un valore non valido per la proprietà DATABASE_IDENTITY_NETWORK_HEADERS. Il valore deve essere un array JSON contenente uno o più nomi di campo validi e non deve superare i 4000 byte.
Argomento padre: chiamare i servizi Web da Autonomous AI Database