Sdílet prostřednictvím


sp_invoke_external_rest_endpoint (Transact-SQL)

Platí pro: SQL Server 2025 (17.x) Preview Azure SQL Database Azure SQLManaged InstanceSQL Database v Microsoft Fabric

Uložená procedura sp_invoke_external_rest_endpoint vyvolá koncový bod REST HTTPS zadaný jako vstupní argument procedury.

Poznámka

Uložená procedura sp_invoke_external_rest_endpoint je ve verzi Preview pro SQL Server 2025 (17.x) Preview.

Způsoby zmírnění rizika neoprávněného přístupu nebo přenosu dat

Upozornění

Použití sp_invoke_external_rest_endpoint uložené procedury umožňuje přenos dat do externí entity.

Pokud chcete zmírnit riziko neoprávněného přístupu nebo přenosu dat, zvažte následující osvědčené postupy zabezpečení:

  • Implementovat silné řízení přístupu: Ujistěte se, že k citlivým datům a koncovým bodům rozhraní REST API mají přístup pouze autorizovaní uživatelé. Použijte princip nejnižších oprávnění, stejně jako databázové role a oprávnění.
  • správné ověřování a autorizační: Ujistěte se, že jsou všechna volání REST ověřená a autorizovaná, aby se zabránilo neoprávněnému přístupu.
  • Monitorování a auditování přístupu: Pravidelně monitorujte a auditujte přístup k databázi a volání rozhraní REST API za účelem zjištění podezřelých aktivit.
  • pravidelná posouzení zabezpečení: Proveďte pravidelná posouzení zabezpečení a kontroly ohrožení zabezpečení za účelem identifikace a zmírnění potenciálních rizik.
  • školení zaměstnanců: Informujte zaměstnance o rizicích exfiltrace dat a důležitosti následujících protokolů zabezpečení.

Syntaxe

Transact-SQL konvence syntaxe

EXECUTE @returnValue = sp_invoke_external_rest_endpoint
  [ @url = ] N'url'
  [ , [ @payload = ] N'request_payload' ]
  [ , [ @headers = ] N'http_headers_as_json_array' ]
  [ , [ @method = ] 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' ]
  [ , [ @timeout = ] seconds ]
  [ , [ @credential = ] credential ]
  [ , @response OUTPUT ]

Argumenty

[ @url = ] N'url'

Adresa URL koncového bodu HTTPS REST, který se má volat. @url je nvarchar(4000) bez výchozího nastavení.

[ @payload = ] N'request_payload'

Řetězec Unicode ve formátu JSON, XML nebo TEXT, který obsahuje datovou část pro odeslání do koncového bodu REST HTTPS. Datové části musí být platný dokument JSON, dokument XML ve správném formátu nebo text. @payload je nvarchar(max) bez výchozího nastavení.

[ @headers = ] HlavičkyN

Hlavičky, které se musí odeslat jako součást požadavku do koncového bodu REST HTTPS. Hlavičky musí být zadány pomocí plochého formátu JSON (dokument JSON bez vnořených struktur). Hlavičky definované v seznamu názvů zakázaných hlaviček se ignorují, i když jsou explicitně předány v parametru @headers ; jejich hodnoty se při spuštění požadavku HTTPS zahodí nebo nahradí hodnotami zadanými systémem.

Parametr @headers je nvarchar(4000) bez výchozího nastavení.

[ @method = ] N' metoda'

Metoda HTTP pro volání adresy URL. Musí to být jedna z následujících hodnot: GET, POST, PUT, PATCH, DELETE, HEAD. @method je nvarchar(6) s POST jako výchozí hodnotou.

[ @timeout = ] sekund

Doba v sekundách povolená pro spuštění volání HTTPS Pokud se během definovaného časového limitu v sekundách nedá odeslat a přijímat úplné požadavky HTTP a odpověď, zastaví se spuštění uložené procedury a vyvolá se výjimka. Časový limit začíná, když se spustí připojení HTTP a skončí, když byla přijata odpověď a datová část zahrnutá, pokud existuje. @timeout je pozitivní smallint s výchozí hodnotou 30. Přijaté hodnoty: 1 až 230.

[ @credential = ] přihlašovacích údajů

Určuje, který objekt CREDENTIAL OBORU DATABÁZE se používá k vložení ověřovacích údajů do požadavku HTTPS. @credential je sysname bez výchozí hodnoty.

výstup @response

Povolte předání odpovědi přijaté z volané koncového bodu do zadané proměnné. @response je nvarchar(max).

Návratová hodnota

Provedení vrátí 0 , pokud bylo volání HTTPS dokončeno a přijatý stavový kód HTTP je stavový kód 2xx (Success). Pokud přijatý stavový kód HTTP není v rozsahu 2xx, návratová hodnota je přijatý stavový kód HTTP. Pokud volání HTTPS nejde vůbec provést, vyvolá se výjimka.

Dovolení

Oprávnění k databázi

Vyžaduje spuštění libovolného oprávnění k databázi EXTERNÍHO KONCOVÉHO BODU.

Například:

GRANT EXECUTE ANY EXTERNAL ENDPOINT TO [<PRINCIPAL>];

Povolení ve službě SQL Server 2025 a Azure SQL Managed Instance

Poznámka

Uložená procedura sp_invoke_external_rest_endpoint je ve verzi Preview pro SQL Server 2025 (17.x) Preview.

Uložená procedura sp_invoke_external_rest_endpoint je dostupná v SQL Serveru 2025 (17.x) Preview a ve službě Azure SQL Managed Instance nakonfigurované se zásadami aktualizace Always-up-to-date a je ve výchozím nastavení zakázaná.

Pokud chcete povolit uloženou proceduru sp_invoke_external_rest_endpoint v SQL Serveru 2025 (17.x) Preview a azure SQL Managed Instance, spusťte následující kód T-SQL:

EXECUTE sp_configure 'external rest endpoint enabled', 1;

RECONFIGURE WITH OVERRIDE;

Chcete-li provést změnu sp_configure možnosti konfigurace nebo spuštění příkazu RECONFIGURE , musí být uživateli uděleno oprávnění na úrovni serveru ALTER SETTINGS. Oprávnění ALTER SETTINGS je implicitně uchovávané pevnými rolemi serveru správce systému a správce serveru.

Poznámka

sp_invoke_external_rest_endpoint ve výchozím nastavení je povolená ve službě Azure SQL Database a v databázi SQL v prostředcích infrastruktury.

Formát odpovědi

Odpověď volání HTTP a výsledná data odesílaná zpět vyvolaný koncový bod jsou k dispozici prostřednictvím výstupního parametru @response. @response může obsahovat dokument JSON s následujícím schématem:

{
  "response": {
    "status": {
      "http": {
        "code": "",
        "description": ""
      }
    },
    "headers": {}
  },
  "result": {}
}

Specificky:

  • odpověď: objekt JSON, který obsahuje výsledek HTTP a další metadata odpovědi.
  • výsledek: datová část JSON vrácená voláním HTTP. Vynechá se, pokud je přijatý výsledek HTTP 204 (No Content).

Nebo @response může obsahovat dokument XML s následujícím schématem:

<output>
    <response>
        <status>
            <http code="" description=" " />
        </status>
        <headers>
            <header key="" value="" />
            <header key="" value="" />
        </headers>
    </response>
    <result>
    </result>
</output>

Specificky:

  • odpověď: objekt XML, který obsahuje výsledek HTTP a další metadata odpovědi.
  • výsledek: datová část XML vrácená voláním HTTP. Vynechá se, pokud je přijatý výsledek HTTP 204 (No Content).

response V části kromě stavového kódu a popisu HTTP jsou v objektu headers k dispozici celá sada hlaviček přijatých odpovědí. Následující příklad ukazuje oddíl response ve formátu JSON (také struktura pro textové odpovědi):

"response": {
  "status": {
    "http": {
      "code": 200,
      "description": "OK"
    }
  },
  "headers": {
    "Date": "Thu, 08 Sep 2022 21:51:22 GMT",
    "Content-Length": "1345",
    "Content-Type": "application\/json; charset=utf-8",
    "Server": "Kestrel",
    "Strict-Transport-Security": "max-age=31536000; includeSubDomains"
    }
  }

Následující příklad ukazuje oddíl response v jazyce XML:

<response>
    <status>
        <http code="200" description="OK" />
    </status>
    <headers>
        <header key="Date" value="Tue, 01 Apr 1976 21:12:04 GMT" />
        <header key="Content-Length" value="2112" />
        <header key="Content-Type" value="application/xml" />
        <header key="Server" value="Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0" />
        <header key="x-ms-request-id" value="31536000-64bi-64bi-64bi-31536000" />
        <header key="x-ms-version" value="2021-10-04" />
        <header key="x-ms-creation-time" value="Wed, 19 Apr 2023 22:17:33 GMT" />
        <header key="x-ms-server-encrypted" value="true" />
    </headers>
</response>

Povolené koncové body

Důležité

Tento seznam platí jenom pro Azure SQL Database a Azure SQL Managed Instance.

Jsou povolena pouze volání koncových bodů pro následující služby:

Služba Azure Doména
Azure Functions (cloudové funkce od Microsoftu) *.azurewebsites.net
Služba Azure Apps *.azurewebsites.net
Azure App Service Environment *.appserviceenvironment.net
Azure Static Web Apps (statické webové aplikace) *.azurestaticapps.net
Azure Logic Apps *.logic.azure.com
Azure Event Hubs *.servicebus.windows.net
Azure Event Grid *.eventgrid.azure.net
Služby Azure AI *.cognitiveservices.azure.com
*.api.cognitive.microsoft.com
Azure OpenAI *.openai.azure.com
PowerApps / Dataverse *.api.crm.dynamics.com
Microsoft Dynamics *.dynamics.com
Azure Container Instances (služba pro práci s kontejnery) *.azurecontainer.io
Azure Container Apps (aplikace pro kontejnery) *.azurecontainerapps.io
Power BI api.powerbi.com
Microsoft Graph graph.microsoft.com
Služby analýzy *.asazure.windows.net
IoT Central *.azureiotcentral.com
Správa rozhraní API *.azure-api.net
Azure Blob Storage (Úložiště Azure pro objekty typu blob) *.blob.core.windows.net
Soubory Azure *.file.core.windows.net
Azure Queue Storage *.queue.core.windows.net
Azure Table Storage (úložiště tabulek) *.table.core.windows.net
Komunikační služby Azure *.communications.azure.com
Vyhledávání Bingem api.bing.microsoft.com
Azure Key Vault *.vault.azure.net
Azure AI Vyhledávač *.search.windows.net
Azure Maps *.atlas.microsoft.com
Azure AI Překladač api.cognitive.microsofttranslator.com

pravidla odchozí brány firewall pro službu Azure SQL Database a Azure Synapse Analytics kontrolní mechanismus je možné použít k dalšímu omezení odchozího přístupu k externím koncovým bodům.

Poznámka

Pokud chcete vyvolat službu REST, která není v seznamu povolených, můžete pomocí služby API Management bezpečně zveřejnit požadovanou službu a zpřístupnit ji sp_invoke_external_rest_endpoint.

Hranice

Velikost datové části

Datová část, při přijetí i při odeslání, má kódování UTF-8 při odesílání přes drát. V takovém formátu je jeho velikost omezená na 100 MB.

Délka adresy URL

Maximální délka adresy URL (vygenerovaná po použití parametru @url a přidání zadaných přihlašovacích údajů do řetězce dotazu( pokud existuje) je 8 kB; Maximální délka řetězce dotazu (řetězec dotazu + řetězec dotazu) je 4 kB.

Velikost záhlaví

Maximální velikost hlavičky požadavku a odpovědi (všechna pole hlaviček: hlavičky předávané prostřednictvím @headers parametru + hlavičky přihlašovacích údajů + systémové hlavičky) je 8 kB.

Škrcení

Počet souběžných připojení k externím koncovým bodům provedeným prostřednictvím sp_invoke_external_rest_endpoint je omezený na 10% pracovních vláken s maximálně 150 pracovními procesy. U jednoúčelové databáze omezování se vynucuje na úrovni databáze, zatímco u elastického fondu se omezování vynucuje na úrovni databáze i na úrovni fondu.

Pokud chcete zkontrolovat, kolik souběžných připojení může databáze udržovat, spusťte následující dotaz:

SELECT [database_name],
       DATABASEPROPERTYEX(DB_NAME(), 'ServiceObjective') AS service_level_objective,
       [slo_name] AS service_level_objective_long,
       [primary_group_max_outbound_connection_workers] AS max_database_outbound_connection,
       [primary_pool_max_outbound_connection_workers] AS max_pool_outbound_connection
FROM sys.dm_user_db_resource_governance
WHERE database_id = DB_ID();

Pokud se při dosažení maximálního počtu souběžných připojení pokusí nové připojení k externímu koncovému bodu, sp_invoke_external_rest_endpoint vyvolá se chyba 10928 (nebo 10936, pokud jste dosáhli limitů elastických fondů). Například:

Msg 10928, Level 16, State 4, Procedure sys.sp_invoke_external_rest_endpoint_internal, Line 1 [Batch Start Line 0]
Resource ID : 1. The outbound connections limit for the database is 20 and has been reached.
See 'https://docs.microsoft.com/azure/azure-sql/database/resource-limits-logical-server' for assistance.

Pověření

Některé koncové body REST vyžadují ověření, aby se správně vyvolalo. Ověřování je obvykle možné provést předáním některých párů klíč-hodnota v řetězci dotazu nebo v hlavičkách HTTP nastavených pomocí požadavku.

Je možné použít DATABASE SCOPED CREDENTIAL k bezpečnému ukládání ověřovacích dat (například nosný token), které se používají sp_invoke_external_rest_endpoint k volání chráněného koncového bodu. Při vytváření parametru DATABASE SCOPED CREDENTIALIDENTITY určete, jaká ověřovací data se předávají do vyvolaného koncového bodu a jak. IDENTITY podporuje čtyři možnosti:

  • : Odeslání zadaných ověřovacích dat pomocí hlaviček požadavků
  • : Odeslání zadaných ověřovacích dat pomocí řetězce dotazu
  • Managed Identity: Pomocí hlaviček požadavku odešlete spravovanou identitu přiřazenou systémem .
  • Shared Access Signature: poskytnutí omezeného delegovaného přístupu k prostředkům prostřednictvím podepsané adresy URL (označované také jako SAS)

DATABASE SCOPED CREDENTIAL Vytvoření lze použít prostřednictvím parametru @credential:

EXECUTE sp_invoke_external_rest_endpoint
    @url = N'https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?key1=value1',
    @credential = [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>];

S touto IDENTITY hodnotou se DATABASE SCOPED CREDENTIAL přidá do hlaviček požadavku. Dvojice klíč-hodnota obsahující ověřovací informace musí být poskytována prostřednictvím SECRET parametru pomocí plochého formátu JSON. Například:

CREATE DATABASE SCOPED CREDENTIAL [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>]
WITH IDENTITY = 'HTTPEndpointHeaders', SECRET = '{"x-functions-key":"<your-function-key-here>"}';

Pravidla názvu přihlašovacích údajů

Vytvořené POVĚŘENÍ DATABASE SCOPED MUSÍ dodržovat konkrétní pravidla, aby bylo možné je používat s sp_invoke_external_rest_endpoint. Pravidla jsou následující:

  • Musí to být platná adresa URL.
  • Doména adresy URL musí být jednou z těchto domén zahrnutých v seznamu povolených.
  • Adresa URL nesmí obsahovat řetězec dotazu.
  • Protokol + plně kvalifikovaný název domény (FQDN) volané adresy URL se musí shodovat s protokolem a plně kvalifikovaným názvem domény názvu přihlašovacích údajů.
  • Každá část pojmenované cesty URL se musí zcela shodovat s odpovídající částí cesty URL v názvu přihlašovacích údajů.
  • Přihlašovací údaje musí odkazovat na cestu, která je obecnější než adresa URL požadavku. Například přihlašovací údaje vytvořené pro cestu https://northwind.azurewebsite.net/customers nejde použít pro adresu URL https://northwind.azurewebsite.net

Pravidla kolace a názvu přihlašovacích údajů

RfC 3986 Oddíl 6.2.2.1 uvádí, že "Pokud identifikátor URI používá součásti obecné syntaxe, pravidla ekvivalence syntaxe součástí vždy platí; a sice, že režim a hostitel nerozlišují malá a velká písmena" a rfc 7230 oddíl 2.7.3 uvádí, že "všechny ostatní se porovnávají způsobem citlivým na malá a velká písmena".

Vzhledem k tomu, že na úrovni databáze existuje sada pravidel kolace, použije se následující logika, která bude koherentní s pravidlem kolace databáze a výše uvedeným dokumentem RFC. (Popsané pravidlo může být potenciálně více omezující než pravidla RFC, například pokud je databáze nastavena tak, aby používala kolaci s rozlišováním velkých a malých písmen.):

  1. Pomocí dokumentu RFC zkontrolujte, jestli se adresa URL a přihlašovací údaje shodují. To znamená:
    • Zkontrolujte schéma a hostitele pomocí kolace nerozlišující malá a velká písmena (Latin1_General_100_CI_AS_KS_WS_SC).
    • Zkontrolujte porovnání všech ostatních segmentů adresy URL v kolaci s rozlišováním velkých a malých písmen (Latin1_General_100_BIN2).
  2. Pomocí pravidel kolace databáze (a bez kódování adresy URL) zkontrolujte, jestli se adresa URL a přihlašovací údaje shodují.

Udělení oprávnění k používání přihlašovacích údajů

Uživatelé databáze, kteří přistupují k přihlašovacím údajům OBORU DATABÁZE, musí mít oprávnění k použití tohoto pověření.

Aby mohl uživatel databáze používat přihlašovací údaje, musí mít oprávnění REFERENCES ke konkrétním přihlašovacím údajům:

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[<CREDENTIAL_NAME>] TO [<PRINCIPAL>];

Poznámky

Typ čekání

Když sp_invoke_external_rest_endpoint čeká na dokončení volání do vyvolané služby, hlásí HTTP_EXTERNAL_CONNECTION typ čekání.

HTTPS a TLS

Podporují se jenom koncové body, které jsou nakonfigurované tak, aby používaly protokol HTTPS s šifrovacím protokolem TLS.

Přesměrování HTTP

sp_invoke_external_rest_endpoint nesměruje automaticky žádné přesměrování HTTP přijaté jako odpověď z vyvolaný koncový bod.

Hlavičky HTTP

sp_invoke_external_rest_endpoint automaticky vloží do požadavku HTTP následující hlavičky:

  • typu obsahu: je nastavená na application/json; charset=utf-8
  • přijmout: nastaveno na application/json
  • uživatelského agenta: nastavte <EDITION>/<PRODUCT VERSION> například: SQL Azure/12.0.2000.8

I když je uživatel-agent vždy přepsán uloženou procedurou, typ obsahu a přijmout hodnoty hlaviček lze definovat pomocí parametru @headers . V typu obsahu je povolena pouze direktiva typu média a zadání direktiv charset nebo hranic není možné.

Podporovaná datová část požadavku a odpovědi typů médií

Níže jsou přijaty hodnoty hlavičky typ obsahu.

  • application/json
  • application/vnd.microsoft.*.json
  • aplikace/xml
  • application/vnd.microsoft.*.xml
  • application/vnd.microsoft.*+xml
  • application/x-www-form-urlencoded
  • Text/*

Pro přijmout záhlaví jsou následující hodnoty.

  • application/json
  • aplikace/xml
  • Text/*

Další informace o typech záhlaví textu naleznete v registru textového typu v IANA.

Poznámka

Pokud testujete vyvolání koncového bodu REST s jinými nástroji, například cURL nebo jakéhokoli moderního klienta REST, jako je režimu spánku , nezapomeňte zahrnout stejné hlavičky, které se automaticky vloží sp_invoke_external_rest_endpoint, aby měly stejné chování a výsledky.

Osvědčené postupy

Použití techniky dávkování

Pokud potřebujete odeslat sadu řádků do koncového bodu REST, například do funkce Azure Nebo do centra událostí, doporučujeme řádky dávkovat do jednoho dokumentu JSON, aby se zabránilo režii volání HTTPS pro každý řádek odesílaný. Můžete to provést pomocí příkazu FOR JSON, například:

-- create the payload
DECLARE @payload AS NVARCHAR (MAX);

SET @payload = (SELECT [object_id],
                       [name],
                       [column_id]
                FROM sys.columns
                FOR JSON AUTO);

-- invoke the REST endpoint
DECLARE @retcode AS INT, @response AS NVARCHAR (MAX);

EXECUTE
    @retcode = sp_invoke_external_rest_endpoint
    @url = '<REST_endpoint>',
    @payload = @payload,
    @response = @response OUTPUT;

-- return the result
SELECT @retcode,
       @response;

Příklady

Tady najdete několik příkladů použití sp_invoke_external_rest_endpoint k integraci s běžnými službami Azure, jako jsou Azure Functions nebo Azure Event Hubs. Další ukázky pro integraci s dalšími službami najdete na GitHubu .

A. Volání funkce Azure Functions pomocí vazby triggeru HTTP bez ověřování

Následující příklad volá funkci Azure Functions pomocí vazby triggeru HTTP umožňující anonymní přístup.

DECLARE @ret AS INT, @response AS NVARCHAR (MAX);

EXECUTE
    @ret = sp_invoke_external_rest_endpoint
    @url = N'https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?key1=value1',
    @headers = N'{"header1":"value_a", "header2":"value2", "header1":"value_b"}',
    @payload = N'{"some":{"data":"here"}}',
    @response = @response OUTPUT;

SELECT @ret AS ReturnCode,
       @response AS Response;

B. Volání funkce Azure Functions pomocí vazby triggeru HTTP s autorizačním klíčem

Následující příklad volá funkci Azure Functions pomocí vazby triggeru HTTP nakonfigurované tak, aby vyžadovala autorizační klíč. Autorizační klíč se předává v x-function-key hlavičce podle požadavků azure Functions. Další informace najdete v tématu Azure Functions – autorizace klíče rozhraní API.

CREATE DATABASE SCOPED CREDENTIAL [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>]
    WITH IDENTITY = 'HTTPEndpointHeaders', SECRET = '{"x-functions-key":"<your-function-key-here>"}';

DECLARE @ret AS INT, @response AS NVARCHAR (MAX);

EXECUTE
    @ret = sp_invoke_external_rest_endpoint
    @url = N'https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?key1=value1',
    @headers = N'{"header1":"value_a", "header2":"value2", "header1":"value_b"}',
    @credential = [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>],
    @payload = N'{"some":{"data":"here"}}',
    @response = @response OUTPUT;

SELECT @ret AS ReturnCode,
       @response AS Response;

C. Čtení obsahu souboru ze služby Azure Blob Storage pomocí tokenu SAS

Tento příklad načte soubor ze služby Azure Blob Storage pomocí tokenu SAS pro ověřování. Výsledky se vrátí ve formátu XML, takže je nutné použít hlavičku "Accept":"application/xml".

DECLARE @ret AS INT, @response AS NVARCHAR (MAX);

EXECUTE
    @ret = sp_invoke_external_rest_endpoint
    @url = N'https://blobby.blob.core.windows.net/datafiles/my_favorite_blobs.txt?sp=r&st=2023-07-28T19:56:07Z&se=2023-07-29T03:56:07Z&spr=https&sv=2022-11-02&sr=b&sig=XXXXXX1234XXXXXX6789XXXXX',
    @headers = N'{"Accept":"application/xml"}',
    @method = 'GET',
    @response = @response OUTPUT;

SELECT @ret AS ReturnCode,
       @response AS Response;

D. Odeslání zprávy do centra událostí pomocí spravované identity Azure SQL Database

Tato ukázka ukazuje, jak můžete odesílat zprávy do služby Event Hubs pomocí spravované identity Azure SQL. Ujistěte se, že jste nakonfigurovali spravovanou identitu systému pro logický server Azure SQL Database, který je hostitelem vaší databáze, například:

az sql server update -g <resource-group> -n <azure-sql-server> --identity-type SystemAssigned

Potom nakonfigurujte službu Event Hubs tak, aby spravovaná identita Azure SQL Serveru mohla odesílat zprávy (role Odesílatel dat služby Azure Event Hubs) do požadovaného centra událostí. Další informace najdete v tématu Použití služby Event Hubs se spravovanými identitami.

Jakmile to uděláte, můžete použít Managed Identity název identity při definování přihlašovacích údajů s vymezeným oborem sp_invoke_external_rest_endpointdatabáze, které používá . Jak je vysvětleno v Ověření aplikace pomocí ID Microsoft Entra pro přístup k prostředkům služby Event Hubs, název prostředku (nebo ID), který se má použít při použití ověřování Microsoft Entra, je https://eventhubs.azure.net:

CREATE DATABASE SCOPED CREDENTIAL [https://<EVENT-HUBS-NAME>.servicebus.windows.net]
WITH IDENTITY = 'Managed Identity', SECRET = '{"resourceid": "https://eventhubs.azure.net"}';
GO

DECLARE @Id AS UNIQUEIDENTIFIER = NEWID();

DECLARE @payload AS NVARCHAR (MAX) = (SELECT *
    FROM (VALUES (@Id, 'John', 'Doe')) AS UserTable(UserId, FirstName, LastName)
    FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER);

DECLARE @url AS NVARCHAR (4000) = 'https://<EVENT-HUBS-NAME>.servicebus.windows.net/from-sql/messages';

DECLARE @headers AS NVARCHAR (4000) = N'{"BrokerProperties": "'
    + STRING_ESCAPE('{"PartitionKey": "'
    + CAST (@Id AS NVARCHAR (36)) + '"}', 'json') + '"}';

DECLARE @ret AS INT, @response AS NVARCHAR (MAX);

EXECUTE
    @ret = sp_invoke_external_rest_endpoint
    @url = @url,
    @headers = @headers,
    @credential = [https://<EVENT-HUBS-NAME>.servicebus.windows.net],
    @payload = @payload,
    @response = @response OUTPUT;

SELECT @ret AS ReturnCode,
       @response AS Response;

E. Čtení a zápis souboru do služby Azure File Storage s přihlašovacími údaji s vymezeným oborem služby Azure SQL Database

Tento příklad zapíše soubor do služby Azure File Storage pomocí přihlašovacích údajů s vymezeným oborem služby Azure SQL Database pro ověřování a vrátí obsah. Výsledky se vrátí ve formátu XML, takže je nutné použít hlavičku "Accept":"application/xml".

Začněte vytvořením hlavního klíče pro databázi Azure SQL. Nahraďte <password> silným heslem.

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO

Pak vytvořte přihlašovací údaje s vymezeným oborem databáze pomocí tokenu SAS poskytnutého účtem služby Azure Blob Storage. Nahraďte <token> zadaným tokenem SAS.

CREATE DATABASE SCOPED CREDENTIAL [filestore]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<token>';
GO

Dále vytvořte soubor a přidejte do něj text s následujícími dvěma příkazy. Nahraďte <domain> příslušnou cestou.

DECLARE @payload AS NVARCHAR (MAX) = (SELECT *
    FROM (VALUES ('Hello from Azure SQL!', sysdatetime())) AS payload([message], [timestamp])
    FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER);

DECLARE @response AS NVARCHAR (MAX);
DECLARE @url AS NVARCHAR (MAX);
DECLARE @headers AS NVARCHAR (1000);

DECLARE @len AS INT = len(@payload);

-- Create the file
SET @url = 'https://<domain>.file.core.windows.net/myfiles/test-me-from-azure-sql.json';
SET @headers = JSON_OBJECT('x-ms-type':'file', 'x-ms-content-length':CAST (@len AS VARCHAR (9)), 'Accept':'application/xml');

EXECUTE sp_invoke_external_rest_endpoint
    @url = @url,
    @method = 'PUT',
    @headers = @headers,
    @credential = [filestore],
    @response = @response OUTPUT;

SELECT CAST (@response AS XML);

-- Add text to the file
SET @headers = JSON_OBJECT('x-ms-range':'bytes=0-' + CAST (@len - 1 AS VARCHAR (9)), 'x-ms-write':'update', 'Accept':'application/xml');
SET @url = 'https://<domain>.file.core.windows.net/myfiles/test-me-from-azure-sql.json';
SET @url += '?comp=range';

EXECUTE sp_invoke_external_rest_endpoint
    @url = @url,
    @method = 'PUT',
    @headers = @headers,
    @payload = @payload,
    @credential = [filestore],
    @response = @response OUTPUT;

SELECT CAST (@response AS XML);
GO

Nakonec k přečtení souboru použijte následující příkaz. Nahraďte <domain> příslušnou cestou.

DECLARE @response AS NVARCHAR (MAX);

DECLARE @url AS NVARCHAR (MAX) = 'https://<domain>.file.core.windows.net/myfiles/test-me-from-azure-sql.json';

EXECUTE sp_invoke_external_rest_endpoint
    @url = @url,
    @headers = '{"Accept":"application/xml"}',
    @credential = [filestore],
    @method = 'GET',
    @response = @response OUTPUT;

SELECT CAST (@response AS XML);
GO

F. Volání Azure OpenAI pomocí spravované identity

Následující příklad volá model Azure OpenAI pomocí spravovaných identit v Microsoft Entra pro Azure SQL. Nahraďte <my-azure-openai-endpoint> koncový bod Azure OpenAI a název modelu a ujistěte se, že máte spravovanou identitu roli <model-deployment-name> ve službě Azure OpenAI.

CREATE DATABASE SCOPED CREDENTIAL [https://<my-azure-openai-endpoint>.openai.azure.com]
    WITH IDENTITY = 'Managed Identity', SECRET = '{"resourceid":"https://cognitiveservices.azure.com"}';
GO

DECLARE @response AS NVARCHAR (MAX);

DECLARE @payload AS NVARCHAR (MAX) = JSON_OBJECT('input':'hello world');

EXECUTE sp_invoke_external_rest_endpoint
    @url = 'https://<my-azure-openai-endpoint>.openai.azure.com/openai/deployments/<model-deployment-name>/embeddings?api-version=2024-08-01-preview',
    @method = 'POST',
    @credential = [https://<my-azure-openai-endpoint>.openai.azure.com],
    @payload = @payload,
    @response = @response OUTPUT;

SELECT json_query(@response, '$.result.data[0].embedding'); -- Assuming the called model is an embedding model