Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy: SQL Server 2025 (17.x) (wersja zapoznawcza) Azure SQL Database Azure SQLManaged Instance
SQL Database
w wersji zapoznawczej
usługi Microsoft Fabric
Procedura składowana sp_invoke_external_rest_endpoint
wywołuje punkt końcowy REST PROTOKOŁU HTTPS podany jako argument wejściowy procedury.
Note
Procedura sp_invoke_external_rest_endpoint
składowana jest dostępna w wersji zapoznawczej programu SQL Server 2025 (17.x) (wersja zapoznawcza).
Sposoby ograniczania ryzyka nieautoryzowanego dostępu lub transferu danych
Caution
Użycie procedury składowanej sp_invoke_external_rest_endpoint
umożliwia transfer danych do jednostki zewnętrznej.
Aby ograniczyć ryzyko nieautoryzowanego dostępu lub transferu danych, należy wziąć pod uwagę następujące najlepsze rozwiązania w zakresie zabezpieczeń:
- Zaimplementuj silne mechanizmy kontroli dostępu: upewnij się, że tylko autoryzowani użytkownicy mają dostęp do poufnych danych i punktów końcowych interfejsu API REST. Należy użyć zasady najniższych uprawnień, a także ról i uprawnień bazy danych.
- Prawidłowe uwierzytelnianie i autoryzacja: upewnij się, że wszystkie wywołania REST są uwierzytelniane i autoryzowane w celu zapobiegania nieautoryzowanemu dostępowi.
- Monitorowanie i inspekcja dostępu: regularne monitorowanie i inspekcja dostępu do bazy danych i wywołań interfejsu API REST w celu wykrywania wszelkich podejrzanych działań.
- regularne oceny zabezpieczeń: Przeprowadzaj regularne oceny zabezpieczeń i skanowania luk w zabezpieczeniach, aby zidentyfikować i ograniczyć potencjalne zagrożenia.
- Szkolenia pracowników: Edukuj pracowników o ryzyku eksfiltracji danych i znaczenie następujących protokołów zabezpieczeń.
Syntax
Transact-SQL konwencje składni
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 ]
Arguments
[ @url = ] N'url'
Adres URL punktu końcowego REST PROTOKOŁU HTTPS, który ma być wywoływany. @url jest nvarchar(4000) bez wartości domyślnej.
[ @payload = ] N'request_payload'
Ciąg Unicode w formacie JSON, XML lub TEXT zawierający ładunek do wysłania do punktu końcowego REST HTTPS. Ładunki muszą być prawidłowym dokumentem JSON, dobrze sformułowanym dokumentem XML lub tekstem. @payload nvarchar(max) bez wartości domyślnej.
[ @headers = ] Nagłówki N'"
Nagłówki, które muszą być wysyłane jako część żądania do punktu końcowego REST protokołu HTTPS. Nagłówki muszą być określone przy użyciu prostego formatu JSON (dokumentu JSON bez zagnieżdżonych struktur). Nagłówki zdefiniowane na liście nazw zabronionych nagłówków są ignorowane, nawet jeśli jawnie przekazano w parametrze @headers ; ich wartości są odrzucane lub zastępowane wartościami dostarczonymi przez system podczas uruchamiania żądania HTTPS.
Parametr @headers jest nvarchar(4000) bez wartości domyślnej.
[ @method = ] N'method'
Metoda HTTP do wywoływania adresu URL. Musi być jedną z następujących wartości: GET
, POST
, PUT
, PATCH
, DELETE
, HEAD
.
@method nvarchar(6) z wartością domyślną POST
.
[ @timeout = ] sekund
Czas w sekundach dozwolony dla uruchomienia wywołania HTTPS. Jeśli pełne żądanie HTTP i odpowiedź nie mogą być wysyłane i odbierane w ramach zdefiniowanego limitu czasu w sekundach, wykonywanie procedury składowanej zostanie zatrzymane i zostanie zgłoszony wyjątek. Limit czasu rozpoczyna się po uruchomieniu i zakończeniu połączenia HTTP, gdy odpowiedź i ładunek uwzględniony, jeśli istnieje, został odebrany. @timeout jest dodatnim smallint z wartością domyślną 30. Zaakceptowane wartości: od 1 do 230.
[ @credential = ] poświadczeń
Określ, który obiekt CREDENTIAL o zakresie bazy danych jest używany do wstrzykiwania informacji uwierzytelniania w żądaniu HTTPS. @credential jest nazwa_systemu bez wartości domyślnej.
dane wyjściowe @response
Zezwalaj na przekazanie odpowiedzi odebranej z wywoływanego punktu końcowego do określonej zmiennej. @response to nvarchar(max).
Return value
Wykonanie jest zwracane 0
, jeśli wykonano wywołanie HTTPS, a otrzymany kod stanu HTTP to kod stanu 2xx (Success
). Jeśli otrzymany kod stanu HTTP nie znajduje się w zakresie 2xx, zwracana wartość to otrzymany kod stanu HTTP. Jeśli w ogóle nie można wykonać wywołania HTTPS, zostanie zgłoszony wyjątek.
Permissions
Database permissions
Wymaga uprawnień DO WYKONYWANIA DOWOLNEJ ZEWNĘTRZNEJ bazy danych PUNKTU KOŃCOWEGO.
For example:
GRANT EXECUTE ANY EXTERNAL ENDPOINT TO [<PRINCIPAL>];
Włączanie w programie SQL Server 2025 i usłudze Azure SQL Managed Instance
Note
Procedura sp_invoke_external_rest_endpoint
składowana jest dostępna w wersji zapoznawczej programu SQL Server 2025 (17.x) (wersja zapoznawcza).
sp_invoke_external_rest_endpoint
Procedura składowana jest dostępna w programie SQL Server 2025 (17.x) w wersji zapoznawczej i usłudze Azure SQL Managed Instance skonfigurowanym z zasadami zawszeup-to-date update i jest domyślnie wyłączona.
Aby włączyć procedurę sp_invoke_external_rest_endpoint
składowaną w programie SQL Server 2025 (17.x) (wersja zapoznawcza) i usłudze Azure SQL Managed Instance, uruchom następujący kod T-SQL:
EXECUTE sp_configure 'external rest endpoint enabled', 1;
RECONFIGURE WITH OVERRIDE;
Aby wykonać sp_configure
polecenie w celu zmiany opcji konfiguracji lub uruchomienia instrukcji RECONFIGURE , użytkownik musi mieć uprawnienie alter SETTINGS na poziomie serwera. Uprawnienie ALTER SETTINGS jest niejawnie przechowywane przez administrator systemu i serweradmin stałe role serwera.
Note
sp_invoke_external_rest_endpoint
jest domyślnie włączona w usługach Azure SQL Database i SQL Database w sieci szkieletowej.
Response format
Odpowiedź wywołania HTTP i wynikowe dane wysyłane z powrotem przez wywołany punkt końcowy są dostępne za pośrednictwem parametru wyjściowego @response. @response może zawierać dokument JSON z następującym schematem:
{
"response": {
"status": {
"http": {
"code": "",
"description": ""
}
},
"headers": {}
},
"result": {}
}
Specifically:
- odpowiedzi: obiekt JSON zawierający wynik HTTP i inne metadane odpowiedzi.
-
wynik: ładunek JSON zwrócony przez wywołanie HTTP. Pominięto, jeśli otrzymany wynik HTTP to 204 (
No Content
).
Lub @response może zawierać dokument XML z następującym schematem:
<output>
<response>
<status>
<http code="" description=" " />
</status>
<headers>
<header key="" value="" />
<header key="" value="" />
</headers>
</response>
<result>
</result>
</output>
Specifically:
- odpowiedzi: obiekt XML zawierający wynik HTTP i inne metadane odpowiedzi.
-
wynik: ładunek XML zwrócony przez wywołanie HTTP. Pominięto, jeśli otrzymany wynik HTTP to 204 (
No Content
).
response
W sekcji oprócz kodu stanu HTTP i opisu cały zestaw odebranych nagłówków odpowiedzi jest udostępniany w headers
obiekcie . Poniższy przykład przedstawia sekcję response
w formacie JSON (także strukturę odpowiedzi tekstowych):
"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"
}
}
W poniższym przykładzie przedstawiono sekcję response
w pliku 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>
Allowed endpoints
Important
Ta lista dotyczy tylko usług Azure SQL Database i Azure SQL Managed Instance.
Dozwolone są tylko wywołania punktów końcowych dla następujących usług:
Azure Service | Domain |
---|---|
Azure Functions | *.azurewebsites.net |
Usługa Azure Apps | *.azurewebsites.net |
Azure App Service Environment | *.appserviceenvironment.net |
Azure Static Web Apps | *.azurestaticapps.net |
Aplikacje logiki Azure | *.logic.azure.com |
Azure Event Hubs | *.servicebus.windows.net |
Azure Event Grid | *.eventgrid.azure.net |
Usługi platformy 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 | *.azurecontainer.io |
Azure Container Apps | *.azurecontainerapps.io |
Power BI | api.powerbi.com |
Microsoft Graph | graph.microsoft.com |
Analysis Services | *.asazure.windows.net |
IoT Central | *.azureiotcentral.com |
API Management | *.azure-api.net |
Azure Blob Storage | *.blob.core.windows.net |
Azure Files | *.file.core.windows.net |
Azure Queue Storage | *.queue.core.windows.net |
Azure Table Storage (usługa przechowywania danych w tabelach) | *.table.core.windows.net |
Azure Communication Services | *.communications.azure.com |
Wyszukiwanie Bing | api.bing.microsoft.com |
Azure Key Vault | *.vault.azure.net |
Wyszukiwanie AI platformy Azure | *.search.windows.net |
Azure Maps | *.atlas.microsoft.com |
Tłumacz platformy Azure AI | api.cognitive.microsofttranslator.com |
reguł zapory ruchu wychodzącego dla usług Azure SQL Database i Azure Synapse Analytics mechanizm kontroli może służyć do dalszego ograniczania dostępu wychodzącego do zewnętrznych punktów końcowych.
Note
Jeśli chcesz wywołać usługę REST, która nie znajduje się na liście dozwolonych, możesz bezpiecznie uwidocznić żądaną usługę i udostępnić ją sp_invoke_external_rest_endpoint
.
Limits
Payload size
Ładunek, zarówno w przypadku odebrania, jak i wysłania, jest zakodowany w formacie UTF-8 podczas wysyłania za pośrednictwem przewodu. W tym formacie jego rozmiar jest ograniczony do 100 MB.
URL length
Maksymalna długość adresu URL (wygenerowana po użyciu parametru @url i dodanie określonych poświadczeń do ciągu zapytania, jeśli istnieje) wynosi 8 KB; maksymalna długość ciągu zapytania (ciąg zapytania i ciąg zapytania poświadczeń) wynosi 4 KB.
Headers size
Maksymalny rozmiar nagłówka żądania i odpowiedzi (wszystkie pola nagłówka: nagłówki przekazywane za pośrednictwem @headers parametru + nagłówka poświadczeń + dostarczone nagłówki systemu) to 8 KB.
Throttling
Liczba równoczesnych połączeń z zewnętrznymi punktami końcowymi wykonywana za pośrednictwem sp_invoke_external_rest_endpoint
jest ograniczona do 10% wątków roboczych, z maksymalnie 150 procesami roboczymi. W przypadku pojedynczej bazy danych ograniczanie jest wymuszane na poziomie bazy danych, podczas gdy na elastycznej puli ograniczanie jest wymuszane zarówno na poziomie bazy danych, jak i na poziomie puli.
Aby sprawdzić, ile równoczesnych połączeń może utrzymać baza danych, uruchom następujące zapytanie:
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();
Jeśli nowe połączenie z zewnętrznym punktem końcowym przy użyciu zostanie sp_invoke_external_rest_endpoint
wypróbowane, gdy osiągnięto już maksymalną liczbę współbieżnych połączeń, zostanie zgłoszony błąd 10928 (lub 10936, jeśli osiągnięto limity pul elastycznych). For example:
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.
Credentials
Niektóre punkty końcowe REST wymagają uwierzytelniania w celu poprawnego wywołania. Uwierzytelnianie można zwykle wykonać, przekazując niektóre określone pary klucz-wartość w ciągu zapytania lub w nagłówkach HTTP ustawionych za pomocą żądania.
Istnieje możliwość użycia DATABASE SCOPED CREDENTIAL
do bezpiecznego przechowywania danych uwierzytelniania (na przykład tokenu elementu nośnego) do sp_invoke_external_rest_endpoint
wywoływania chronionego punktu końcowego. Podczas tworzenia elementu użyj parametru DATABASE SCOPED CREDENTIAL
IDENTITY
, aby określić, jakie dane uwierzytelniania są przekazywane do wywoływanego punktu końcowego i jak.
IDENTITY
obsługuje cztery opcje:
-
HTTPEndpointHeaders
: wysyłanie określonych danych uwierzytelniania przy użyciu nagłówków żądań : wysyłanie określonych danych uwierzytelniania przy użyciu ciągu zapytania : wyślij tożsamości zarządzanej przypisanej przez system przy użyciu nagłówków żądania -
Shared Access Signature
: zapewniają ograniczony delegowany dostęp do zasobów za pośrednictwem podpisanego adresu URL (nazywanego również sygnaturą dostępu współdzielonego)
Utworzone można DATABASE SCOPED CREDENTIAL
użyć za pomocą 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>];
Z tą IDENTITY
wartością element DATABASE SCOPED CREDENTIAL
jest dodawany do nagłówków żądań. Para klucz-wartość zawierająca informacje uwierzytelniania musi być podana za pośrednictwem parametru SECRET
przy użyciu płaskiego formatu JSON. For example:
CREATE DATABASE SCOPED CREDENTIAL [https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>]
WITH IDENTITY = 'HTTPEndpointHeaders', SECRET = '{"x-functions-key":"<your-function-key-here>"}';
Reguły nazw poświadczeń
Utworzone POŚWIADCZENIE O ZAKRESIE BAZY DANYCH musi być zgodne z określonymi regułami, aby można było ich używać z sp_invoke_external_rest_endpoint
. Reguły są następujące:
- Musi być prawidłowym adresem URL
- Domena adresu URL musi być jedną z tych domen uwzględnionych na liście dozwolonych
- Adres URL nie może zawierać ciągu zapytania
- Protokół + w pełni kwalifikowana nazwa domeny (FQDN) wywoływanego adresu URL musi być zgodna z protokołem i nazwą FQDN nazwy poświadczeń
- Każda część wywoływanej ścieżki adresu URL musi być całkowicie zgodna z odpowiednią częścią ścieżki adresu URL w nazwie poświadczeń
- Poświadczenie musi wskazywać ścieżkę, która jest bardziej ogólna niż adres URL żądania. Na przykład nie można użyć poświadczeń utworzonych dla ścieżki
https://northwind.azurewebsite.net/customers
dla adresu URLhttps://northwind.azurewebsite.net
Reguły sortowania i nazw poświadczeń
RFC 3986 Sekcja 6.2.2.1 stwierdza, że "Gdy identyfikator URI używa składników składni ogólnej, reguły równoważności składni składników są zawsze stosowane; mianowicie, że schemat i host są bez uwzględniania wielkości liter" i RFC 7230 Sekcja 2.7.3 wspomina, że "wszystkie inne są porównywane w sposób uwzględniający wielkość liter".
Ponieważ na poziomie bazy danych jest ustawiona reguła sortowania, stosowana jest następująca logika, aby była spójna z regułą sortowania bazy danych i specyfikacją RFC wymienioną powyżej. (Opisana reguła może być potencjalnie bardziej restrykcyjna niż reguły RFC, na przykład jeśli baza danych ma używać sortowania uwzględniającego wielkość liter).
- Sprawdź, czy adres URL i poświadczenia są zgodne przy użyciu specyfikacji RFC, co oznacza:
- Sprawdź schemat i host przy użyciu sortowania bez uwzględniania wielkości liter (
Latin1_General_100_CI_AS_KS_WS_SC
) - Sprawdź, czy wszystkie inne segmenty adresu URL są porównywane w sortowaniu uwzględniającym wielkość liter (
Latin1_General_100_BIN2
)
- Sprawdź schemat i host przy użyciu sortowania bez uwzględniania wielkości liter (
- Sprawdź, czy adres URL i poświadczenia są zgodne przy użyciu reguł sortowania bazy danych (i bez kodowania adresu URL).
Udzielanie uprawnień do używania poświadczeń
Użytkownicy bazy danych, którzy uzyskują dostęp do POŚWIADCZENIA W ZAKRESIE BAZY DANYCH, muszą mieć uprawnienia do używania tego poświadczenia.
Aby użyć poświadczeń, użytkownik bazy danych musi mieć REFERENCES
uprawnienia do określonego poświadczenia:
GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[<CREDENTIAL_NAME>] TO [<PRINCIPAL>];
Remarks
Wait type
Gdy sp_invoke_external_rest_endpoint
oczekuje na zakończenie wywołania wywołania wywoływanej usługi, zgłasza HTTP_EXTERNAL_CONNECTION
typ oczekiwania.
Protokoły HTTPS i TLS
Obsługiwane są tylko punkty końcowe skonfigurowane do używania protokołu HTTPS z protokołem szyfrowania TLS.
HTTP redirects
sp_invoke_external_rest_endpoint
Nie jest automatycznie obserwowane żadne przekierowanie HTTP odebrane jako odpowiedź z wywoływanego punktu końcowego.
HTTP headers
sp_invoke_external_rest_endpoint
automatycznie wprowadza następujące nagłówki w żądaniu HTTP:
-
typu zawartości: ustaw wartość
application/json; charset=utf-8
-
zaakceptować: ustaw wartość na
application/json
-
agenta użytkownika: ustaw
<EDITION>/<PRODUCT VERSION>
na przykład:SQL Azure/12.0.2000.8
Chociaż agent użytkownika jest zawsze zastępowany przez procedurę składowaną, wartości typu zawartości i akceptowania nagłówka mogą być definiowane przez użytkownika za pośrednictwem parametru @headers . Tylko dyrektywa typu nośnika może być określona w typie zawartości i określenie dyrektyw charset lub granic nie jest możliwe.
Ładunki żądań i odpowiedzi obsługiwane typów multimediów
Poniżej są akceptowane wartości nagłówka typu zawartości.
- application/json
- application/vnd.microsoft.*.json
- application/xml
- application/vnd.microsoft.*.xml
- application/vnd.microsoft.*+xml
- application/x-www-form-urlencoded
- text/*
W przypadku zaakceptuj nagłówek są akceptowane wartości.
- application/json
- application/xml
- text/*
Aby uzyskać więcej informacji na temat typów nagłówków tekstowych, zobacz rejestr typów tekstu w usłudze IANA.
Note
Jeśli testujesz wywołanie punktu końcowego REST za pomocą innych narzędzi, takich jak cURL lub dowolny nowoczesny klient REST, taki jak bezsenność, upewnij się, że dołącz te same nagłówki, które są automatycznie wstrzykiwane przez sp_invoke_external_rest_endpoint
, aby mieć takie samo zachowanie i wyniki.
Best practices
Używanie techniki przetwarzania wsadowego
Jeśli musisz wysłać zestaw wierszy do punktu końcowego REST, na przykład do funkcji platformy Azure lub centrum zdarzeń, zaleca się dzielenie wierszy na pojedynczy dokument JSON, aby uniknąć obciążenia wywołania HTTPS dla każdego wysłanego wiersza. Można to zrobić przy użyciu instrukcji FOR JSON
, na przykład:
-- 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;
Examples
Tutaj można znaleźć kilka przykładów dotyczących sposobu używania sp_invoke_external_rest_endpoint
do integracji z typowymi usługami platformy Azure, takimi jak Azure Functions lub Azure Event Hubs. Więcej przykładów do integracji z innymi usługami można znaleźć w witrynie GitHub.
A. Wywoływanie funkcji platformy Azure przy użyciu powiązania wyzwalacza HTTP bez uwierzytelniania
Poniższy przykład wywołuje funkcję platformy Azure przy użyciu powiązania wyzwalacza HTTP umożliwiającego dostęp anonimowy.
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. Wywoływanie funkcji platformy Azure przy użyciu powiązania wyzwalacza HTTP z kluczem autoryzacji
Poniższy przykład wywołuje funkcję platformy Azure przy użyciu powiązania wyzwalacza HTTP skonfigurowanego do wymagania klucza autoryzacji. Klucz autoryzacji jest przekazywany w nagłówku zgodnie z x-function-key
wymaganiami usługi Azure Functions. Aby uzyskać więcej informacji, zobacz Azure Functions — autoryzacja klucza interfejsu 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. Odczytywanie zawartości pliku z usługi Azure Blob Storage przy użyciu tokenu SAS
W tym przykładzie odczytuje plik z usługi Azure Blob Storage przy użyciu tokenu SAS na potrzeby uwierzytelniania. Wyniki są zwracane w formacie XML, dlatego należy użyć nagłówka "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. Wysyłanie komunikatu do centrum zdarzeń przy użyciu tożsamości zarządzanej usługi Azure SQL Database
W tym przykładzie pokazano, jak można wysyłać komunikaty do usługi Event Hubs przy użyciu tożsamości zarządzanej usługi Azure SQL. Upewnij się, że skonfigurowano System Managed Identity dla serwera logicznego usługi Azure SQL Database hostowania bazy danych, na przykład:
az sql server update -g <resource-group> -n <azure-sql-server> --identity-type SystemAssigned
Następnie skonfiguruj usługę Event Hubs, aby umożliwić tożsamości zarządzanej programu Azure SQL Server wysyłanie komunikatów ("Rola nadawcy danych usługi Azure Event Hubs") do żądanego centrum zdarzeń. Aby uzyskać więcej informacji, zobacz Używanie usługi Event Hubs z tożsamościami zarządzanymi.
Po wykonaniu Managed Identity
tej czynności można użyć nazwy tożsamości podczas definiowania poświadczeń o określonym zakresie bazy danych, które są używane przez sp_invoke_external_rest_endpoint
program . Jak wyjaśniono w Uwierzytelnij aplikację przy użyciu identyfikatora Entra firmy Microsoft w celu uzyskania dostępu do zasobów usługi Event Hubs, nazwa zasobu (lub identyfikator) używana podczas korzystania z uwierzytelniania microsoft Entra jest 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. Odczytywanie i zapisywanie pliku w usłudze Azure File Storage przy użyciu poświadczeń o zakresie usługi Azure SQL Database
W tym przykładzie plik jest zapisywany w usłudze Azure File Storage przy użyciu poświadczeń o zakresie usługi Azure SQL Database na potrzeby uwierzytelniania, a następnie zwraca zawartość. Wyniki są zwracane w formacie XML, dlatego należy użyć nagłówka "Accept":"application/xml"
.
Zacznij od utworzenia klucza głównego dla bazy danych Azure SQL Database. Zastąp <password>
ciąg silnym hasłem.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<password>';
GO
Następnie utwórz poświadczenia o zakresie bazy danych przy użyciu tokenu SAS dostarczonego przez konto usługi Azure Blob Storage. Zastąp <token>
element podanym tokenem SAS.
CREATE DATABASE SCOPED CREDENTIAL [filestore]
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = '<token>';
GO
Następnie utwórz plik i dodaj do niego tekst za pomocą następujących dwóch instrukcji. Zastąp <domain>
ciąg odpowiednią ścieżką.
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
Na koniec użyj następującej instrukcji, aby odczytać plik. Zastąp <domain>
ciąg odpowiednią ścieżką.
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. Wywoływanie interfejsu OpenAI platformy Azure przy użyciu tożsamości zarządzanej
Poniższy przykład wywołuje model usługi Azure OpenAI przy użyciu tożsamości zarządzanych w usłudze Microsoft Entra for Azure SQL. Zastąp <my-azure-openai-endpoint>
wartości i <model-deployment-name>
odpowiednio nazwą punktu końcowego i modelu usługi Azure OpenAI, a następnie upewnij się, że nadano tożsamość zarządzaną rolę użytkownika openAI usług Cognitive Services w usłudze 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
Related content
- zarządzanie zasobami w usłudze 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
- UDZIELANIE uprawnień bazy danych (Transact-SQL)
- UTWÓRZ UWIERZYTELNIENIE ZAKRESU BAZY DANYCH (Transact-SQL)
- API Management
- przykłady użycia sp_invoke_external_rest_endpoint