Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2025 (17.x) Preview
Azure SQL Database Azure SQL
Managed Instance
SQL 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
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 CREDENTIAL
IDENTITY
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>];
-
hlaviček požadavků
-
řetězce dotazu
- spravované identity
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 URLhttps://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.):
- 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
).
- Zkontrolujte schéma a hostitele pomocí kolace nerozlišující malá a velká písmena (
- 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
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_endpoint
databá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
Související obsah
- správa prostředků ve službě Azure SQL Database
- sys.dm_resource_governor_resource_pools_history_ex
- sys.dm_resource_governor_workload_groups_history_ex
- sys.dm_user_db_resource_governance
-
udělit oprávnění k databázi (Transact-SQL) - CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL)
-
API Management - sp_invoke_external_rest_endpoint ukázky využití