Konfigurera PolyBase för åtkomst till externa data i S3-kompatibel objektlagring
gäller för: SQL Server 2022 (16.x)
Den här artikeln beskriver hur du använder PolyBase för att fråga externa data i S3-kompatibel objektlagring.
SQL Server 2022 (16.x) introducerar möjligheten att ansluta till alla S3-kompatibla objektlagring, det finns två tillgängliga alternativ för autentisering: grundläggande autentisering eller direktauktorisering (kallas även STS-auktorisering).
Grundläggande autentisering, även kallat statiska autentiseringsuppgifter, kräver att användaren lagrar access key id
och secret key id
i SQL Server, det är upp till användaren att uttryckligen återkalla och rotera autentiseringsuppgifterna när det behövs. Detaljerad åtkomstkontroll skulle kräva att administratören konfigurerar statiska autentiseringsuppgifter för varje inloggning. Den här metoden kan vara utmanande när det gäller dussintals eller hundratals unika autentiseringsuppgifter.
Genomströmningsauktorisering (STS) ger en lösning på dessa problem genom att aktivera användningen av SQL Server-användarens identiteter för att få åtkomst till S3-kompatibel objektlagring. S3-kompatibel objektlagring har möjlighet att tilldela en tillfällig autentiseringsuppgift med hjälp av TJÄNSTEN för säker token (STS). Dessa autentiseringsuppgifter genereras kortsiktigt och dynamiskt.
Den här artikeln innehåller instruktioner för både grundläggande autentisering och sts-auktorisering (pass-through authorization).
Förutsättningar
Om du vill använda de S3-kompatibla objektlagringsintegreringsfunktionerna behöver du följande verktyg och resurser:
- Installera PolyBase-funktionen för SQL Server.
- Installera SQL Server Management Studio (SSMS) eller Azure Data Studio.
- S3-kompatibel lagring.
- En S3-bucket har skapats. Bucketar kan inte skapas eller konfigureras från SQL Server.
- En användare (
Access Key ID
) och hemligheten (Secret Key ID
) som du känner till. Du måste båda autentisera mot S3-objektlagringsslutpunkten. - TLS (Transport Layer Security) måste konfigureras. Det förutsätts att alla anslutningar överförs säkert via HTTPS, inte HTTP. Slutpunkten verifieras av ett certifikat som är installerat på operativsystemets värd för SQL Server. Mer information om TLS och certifikat finns i Aktivera krypterade anslutningar till databasmotorn.
Behörigheter
För att proxyanvändaren ska kunna läsa innehållet i en S3-bucket måste användaren (Access Key ID
) tillåtas utföra följande åtgärder mot S3-slutpunkten:
-
GetBucketLocation och GetObject behörigheter krävs för att läsa en specifik fil från S3-objektlagring.
-
ListBucket krävs för externa tabeller eller OPENROWSET-frågor som pekar på en S3-mappplats i stället för en enda fil. Utan ListBucket- behörigheter får du felet
Msg 4860, Level 16, State 7, Line 15 Cannot bulk load. The file "s3://<ip address>:9000/bucket/*.*" does not exist or you don't have file access rights.
-
ListBucket krävs för externa tabeller eller OPENROWSET-frågor som pekar på en S3-mappplats i stället för en enda fil. Utan ListBucket- behörigheter får du felet
- PutObject behörighet krävs för att skriva till S3-objektlagring.
Tips
Din S3-kompatibla objektlagringsprovider kan kräva ytterligare API-åtgärdsbehörigheter eller använda olika namngivningar för roller som innehåller behörigheter till API-åtgärder. Läs produktdokumentationen.
Aktivera PolyBase
Aktivera PolyBase i
sp_configure
:EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1; GO RECONFIGURE GO
Bekräfta inställningen:
EXEC sp_configure @configname = 'polybase enabled';
Autentisering
För att fortsätta väljer du Grundläggande autentisering eller direktauktorisering (STS).
Grundläggande autentisering
Innan du skapar en databasomfattande autentiseringsuppgift måste användardatabasen ha en huvudnyckel för att skydda autentiseringsuppgifterna. Mer information finns i CREATE MASTER KEY.
Skapa en databasomfattande autentiseringsuppgift med grundläggande autentisering
Följande exempelskript skapar en databasomfattande autentiseringsuppgift s3-dc
i database_name
-databasen i en SQL Server-instans. Mer information finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL).
USE [database_name];
GO
IF NOT EXISTS(SELECT * FROM sys.database_scoped_credentials WHERE name = 's3_dc')
BEGIN
CREATE DATABASE SCOPED CREDENTIAL s3_dc
WITH IDENTITY = 'S3 Access Key',
SECRET = '<AccessKeyID>:<SecretKeyID>' ;
END
GO
Kontrollera den nya databasomfattande autentiseringsuppgiften med sys.database_scoped_credentials (Transact-SQL):
SELECT * FROM sys.database_scoped_credentials;
Skapa en extern datakälla med grundläggande autentisering
Följande exempelskript skapar en extern datakälla s3_ds
i källanvändardatabasen i SQL Server. Den externa datakällan refererar till s3_dc
databasomfattande autentiseringsuppgifter. Mer information finns i CREATE EXTERNAL DATA SOURCE.
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Verifiera den nya externa datakällan med sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Virtuella värdbaserade URL:er
Vissa S3-kompatibla lagringssystem (till exempel Amazon Web Services) använder url:er i virtual_hosted
format för att implementera mappstrukturen i S3-bucketen. Lägg till följande CONNECTION_OPTIONS
för att skapa externa tabeller som pekar på mappplatser i S3-bucketen, till exempel CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'
.
Utan den CONNECTION_OPTIONS
inställningen kan följande fel uppstå när du frågar efter externa tabeller som pekar på en mapp:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
Begränsningar för grundläggande autentisering
- För S3-kompatibel objektlagring får kunderna inte skapa sitt åtkomstnyckel-ID med ett
:
tecken i det. - Den totala URL-längden är begränsad till 259 tecken. Det innebär att
s3://<hostname>/<objectkey>
inte får överstiga 259 tecken.s3://
räknas in i den här gränsen, så sökvägens längd kan inte överstiga 259 - 5 = 254 tecken. - SQL-autentiseringsuppgifternas namn begränsas av 128 tecken i UTF-16-format.
- Namnet på autentiseringsuppgifterna som skapas måste innehålla bucketnamnet om inte den här autentiseringsuppgiften är för en ny extern datakälla.
- Åtkomstnyckel-ID och hemligt nyckel-ID får endast innehålla alfanumeriska värden.
Vidarebefordranstillstånd (STS)
S3-kompatibel objektlagring har möjlighet att tilldela en tillfällig autentiseringsuppgift med hjälp av Secure Token Service (STS). Dessa autentiseringsuppgifter genereras kortsiktigt och dynamiskt.
Direktauktorisering förlitar sig på Active Directory Federation Service (ADFS) som fungerar som identitetsprovider för OpenID Connect (OIDC). Det är ADFS som ansvarar för att kommunicera med S3-kompatibel objektlagrings-STS, begära STS och returnera den till SQL Server.
Använd STS-auktorisering (genomströmning) på SQL Server
TLS måste konfigureras med certifikat mellan SQL Server och den S3-kompatibla värdservern. Det förutsätts att alla anslutningar överförs säkert via HTTPS, inte HTTP. Slutpunkten verifieras av ett certifikat som är installerat på SQL Server OS-värden. Offentliga eller självsignerade certifikat stöds.
Skapa en databasomfattande autentiseringsuppgift som ska användas för att skicka identiteten till den S3-kompatibla objektlagringen. Mer information finns i CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Som följande exempel:
CREATE DATABASE SCOPED CREDENTIAL CredName WITH IDENTITY = 'User Identity'
Skapa en extern datakälla för åtkomst till den S3-kompatibla objektlagringen. Använd
CONNECTION_OPTIONS
, som JSON-format, för att informera den information som krävs för både ADFS och STS. Mer information finns i CREATE EXTERNAL DATA SOURCE. Som följande exempel:CREATE EXTERNAL DATA SOURCE EdsName WITH { LOCATION = 's3://<hostname>:<port>/<bucket_name>' , CREDENTIAL = <CredName> [ , CONNECTION_OPTIONS = ' { [ , "authorization": { "adfs": { "endpoint": "http[s]://hostname:port/servicepath", "relying_party": "SQL Server Relying Party Identifier" }, "sts": { "endpoint": "http[s]://hostname:port/stspath", "role_arn": "Role Arn" [ , "role_session_name": "AD user login" ] -- default value if not provided [ , "duration_seconds": 3600 ] -- default value if not provided [ , "version": "2011-06-15" ] -- default value if not provided [ , "request_parameters": "In request query string format" ] } } ] [ , "s3": { "url_style": "Path" } ] }' ] }
-
ADFS
-alternativen anger transportslutpunkten för Windows ochrelying_party
-identifieraren för SQL Server i ADFS. -
STS
alternativ anger STS-slutpunkten för S3-kompatibel objektlagring och parametrar förAssumeRoleWithWebIdentity
begäran.AssumeRoleWithWebIdentity
är den metod som används för att hämta de tillfälliga säkerhetsautentiseringsuppgifter som används för att autentisera. Den fullständiga listan över parametrar, inklusive valfria, och information om standardvärden finns i STS API-referens.
Använda sts-auktorisering (genomströmning) med Active Directory
- Markera egenskaper för SQL Server-användarkonton i AD som meningslösa för att tillåta direktströmning till S3-kompatibel lagring.
- Tillåt Kerberos-begränsad delegering till ADFS-tjänster för användaren som är relaterad till SQL Server SPN (tjänstens huvudnamn).
Använda genomströmningsauktorisering (STS) med Active Directory Federation Service
- Aktivera SQL Server för att vara ett tillitsförhållande för anspråksutfärdare i Active Directory.
- Tillåt Windows-autentisering på intranät som autentiseringsmetoder för ADFS.
- Aktivera windows transporttjänstslutpunkt i intranätet.
- Aktivera OIDC-slutpunkter (OpenID Connect).
- Registrera SQL Server som ett förlitande partförtroende.
- Ange en unik identifierare.
- Ange anspråksregler för JWT (JSON-webbtoken).
- Anpassade anspråk – Dessa anspråk kan läggas till av kunder om dessa behövs för att fastställa åtkomstprincipen på lagringssidan.
- Kontakta din S3-kompatibla plattformleverantör för mer leverantörsspecifik information.
Använda sts-auktorisering (pass-through) på S3-kompatibel objektlagring
Följ dokumentationen från en S3-kompatibel lagringsprovider för att konfigurera en extern OIDC-identitetsprovider. För att konfigurera identitetsprovidern behövs vanligtvis följande värden.
- Konfigurationsslutpunkt för OIDC-provider.
- Tumavtryck för OIDC-leverantören.
- Direktauktorisering till S3-kompatibel objektlagring
Begränsningar för sts-auktorisering (pass-through)
- Direktauktorisering (STS) till S3-kompatibel objektlagring stöds för SQL Server-inloggningar med Windows-autentisering.
- STS-token kan inte användas för SÄKERHETSKOPIERING till URL för S3-kompatibel objektlagring.
- ADFS och SQL Server måste finnas i samma domän. ADFS Windows-transportslutpunkten ska inaktiveras från extranätet.
- ADFS bör ha samma AD (Active Directory) som SQL Server som anspråksförtroendeprovider.
- S3-kompatibel lagring bör ha STS-slutpunktstjänst som gör det möjligt för klienter att begära tillfälliga autentiseringsuppgifter med hjälp av JWT för externa identiteter.
- OPENROWSET- och CETAS-frågor (Skapa extern tabell som välj) stöds för parquet- och CSV-format.
- Som standard är kerberos-biljettförnyelsetiden sju dagar och livslängden är 10 timmar i Windows och 2 timmar i Linux. SQL Server förnyar Kerberos-token för användaren upp till sju dagar. Efter sju dagar upphör användarens biljett att gälla, vilket leder till att vidarebefordran till S3-kompatibel lagring misslyckas. I det här fallet måste SQL Server autentisera användaren igen för att få en ny Kerberos-biljett.
- ADFS 2019 med Windows Server 2019 stöds.
- S3 REST API-anrop använder AWS-signatur version 4.
PolyBase på SQL Server i Linux
För PolyBase på SQL Server i Linux krävs mer konfiguration.
- TLS måste konfigureras. Det förutsätts att alla anslutningar överförs säkert via HTTPS, inte HTTP. Slutpunkten godkänns av ett certifikat som är installerat på SQL Server-värdsnoden.
- Certifikathantering skiljer sig från Linux. Granska och följ konfigurationen som beskrivs i Linux-stöd för S3-kompatibel lagring.