Konfigurieren von PolyBase für den Zugriff auf externe Daten im S3-kompatiblen Objektspeicher
Gilt für: SQL Server 2022 (16.x)
In diesem Artikel wird erläutert, wie Sie mithilfe von PolyBase externe Daten in S3-kompatiblen Objektspeicher abfragen.
SQL Server 2022 (16.x) bietet die Möglichkeit, eine Verbindung mit einem S3-kompatiblen Objektspeicher herzustellen. Es gibt zwei verfügbare Optionen für die Authentifizierung: Standardauthentifizierung oder Pass-Through-Autorisierung (auch als STS-Autorisierung bezeichnet).
Für die Standardauthentifizierung, auch als statische Anmeldedaten bezeichnet, muss der Benutzer access key id
und secret key id
in SQL Server speichern. Es liegt in der Verantwortung des Benutzers, die Anmeldedaten bei Bedarf explizit zu widerrufen und zu ändern. Eine differenzierte Access Control würde erfordern, dass der Administrator statische Anmeldedaten für jede Anmeldung einrichtet. Dieser Ansatz kann beim Umgang mit Dutzenden oder Hunderten eindeutiger Anmeldedaten schwierig sein.
Die Pass-Through-Autorisierung (STS) bietet eine Lösung für diese Probleme, indem die Verwendung von SQL Server-Identitäten des eigenen Benutzers für den Zugriff auf den S3-kompatiblen Objektspeicher ermöglicht wird. S3-kompatibler Objektspeicher verfügt über die Möglichkeit, temporäre Anmeldedaten mithilfe des Secure Token Service (STS) zuzuweisen. Diese Anmeldeinformationen werden kurzfristig und dynamisch generiert.
Dieser Artikel enthält Anweisungen für die Standardauthentifizierung und die Pass-Through-Autorisierung (Pass-Through Authorization, STS).
Voraussetzungen
Um die S3-kompatiblen Objektspeicherintegrationsfeatures zu verwenden, benötigen Sie die folgenden Tools und Ressourcen:
- Installieren Sie das PolyBase-Feature für SQL Server.
- Installieren Sie SQL Server Management Studio (SSMS) oder Azure Data Studio.
- S3-kompatibler Speicher.
- Ein S3-Bucket wird erstellt. Von SQL Server aus können keine Buckets erstellt oder konfiguriert werden.
- Ein Benutzer (
Access Key ID
) und der geheime Schlüssel (Secret Key ID
), der Ihnen bekannt ist. Sie benötigen beide für die Authentifizierung beim S3-Objektspeicher. - Transport Layer Security (TLS) muss konfiguriert werden. Es wird vorausgesetzt, dass alle Verbindungen sicher über HTTPS (nicht über HTTP) übertragen werden. Der Endpunkt wird anhand eines Zertifikats überprüft, das auf dem SQL Server-Betriebssystemhost installiert ist. Weitere Informationen zu TLS und Zertifikaten finden Sie unter Aktivieren von verschlüsselten Verbindungen mit der Datenbank-Engine.
Berechtigungen
Damit Proxybenutzer*innen den Inhalt eines S3-Buckets lesen können, müssen Benutzer*innen (Access Key ID
) die folgenden Aktionen für den S3-Endpunkt ausführen dürfen:
- GetBucketLocation- und GetObject-Berechtigungen sind erforderlich, um eine bestimmte Datei aus dem S3-Objektspeicher zu lesen.
- ListBucket ist für externe Tabellen oder OPENROWSET-Abfragen erforderlich, die auf einen S3-Ordnerspeicherort statt auf eine einzelne Datei verweisen. Ohne ListBucket-Berechtigungen wird die Fehlermeldung
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.
angezeigt
- ListBucket ist für externe Tabellen oder OPENROWSET-Abfragen erforderlich, die auf einen S3-Ordnerspeicherort statt auf eine einzelne Datei verweisen. Ohne ListBucket-Berechtigungen wird die Fehlermeldung
- Die PutObject-Berechtigung ist erforderlich, um in den S3-Objektspeicher zu schreiben.
Tipp
Ihr S3-kompatibler Objektspeicheranbieter benötigt möglicherweise zusätzliche API-Vorgangsberechtigungen. Oder Sie verwenden eine andere Benennung für Rollen, die Berechtigungen für API-Vorgänge enthalten. Informationen dazu finden Sie in der Dokumentation des Produktes.
Aktivieren von PolyBase
Aktivieren von PolyBase in
sp_configure
:EXEC sp_configure @configname = 'polybase enabled', @configvalue = 1; GO RECONFIGURE GO
Bestätigen Sie die Einstellung:
EXEC sp_configure @configname = 'polybase enabled';
Authentifizierung
Um fortzufahren, wählen Sie die Standardauthentifizierung oder Pass-Through-Autorisierung (STS) aus.
Standardauthentifizierung
Vor dem Erstellen von datenbankweit gültigen Anmeldeinformationen muss die Benutzerdatenbank über einen Hauptschlüssel zum Schützen der Anmeldeinformationen verfügen. Weitere Informationen finden Sie unter CREATE MASTER KEY.
Erstellen von Anmeldeinformationen mit Datenbankbereich mit Standardauthentifizierung
Das folgende Beispielskript erstellt eine datenbankbezogene Anmeldeinformation s3-dc
in der database_name
-Datenbank in SQL Server-Instanz. Weitere Informationen finden Sie unter 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
Überprüfen Sie die neue datenbankbezogene Anmeldeinformation mit sys.database_scoped_credentials (Transact-SQL):
SELECT * FROM sys.database_scoped_credentials;
Erstellen einer externen Datenquelle mit Standardauthentifizierung
Das folgende Beispielskript erstellt eine externe Datenquelle s3_ds
in der Quellbenutzerdatenbank in SQL Server. Die externe Datenquelle verweist auf die Anmeldeinformationen für die Datenbank s3_dc
. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (CREATE EXTERNAL DATA SOURCE).
CREATE EXTERNAL DATA SOURCE s3_ds
WITH
( LOCATION = 's3://<ip_address>:<port>/'
, CREDENTIAL = s3_dc
);
GO
Überprüfen Sie die neue externe Datenquelle mit sys.external_data_sources.
SELECT * FROM sys.external_data_sources;
Virtuelle gehostete URLs
Einige S3-kompatible Speichersysteme (z. B. Amazon Web Services) verwenden URLs im virtual_hosted
-Stil, um die Ordnerstruktur im S3-Bucket zu implementieren. Fügen Sie das folgende CONNECTION_OPTIONS
hinzu, um die Erstellung von externen Tabellen zu ermöglichen, die auf Ordner im S3-Bucket verweisen, z. B. CONNECTION_OPTIONS = '{"s3":{"url_style":"virtual_hosted"}}'
.
Ohne diese CONNECTION_OPTIONS
-Einstellung können Sie beim Abfragen externer Tabellen, die auf einen Ordner verweisen, den folgenden Fehler beobachten:
Msg 13807, Level 16, State 1, Line 23
Content of directory on path '/<folder_name>/' cannot be listed.
Einschränkungen der Standardauthentifizierung
- Bei S3-kompatiblem Objektspeicher dürfen Kunden ihre Zugriffsschlüssel-ID nicht mit einem
:
-Zeichen erstellen. - Die Gesamtlänge der URL ist auf 259 Zeichen beschränkt. Dies bedeutet, dass
s3://<hostname>/<objectkey>
259 Zeichen nicht überschreiten darf.s3://
wird auf diesen Grenzwert angerechnet, sodass die Pfadlänge 259-5 = 254 Zeichen nicht überschreiten kann. - Der SQL-Anmeldeinformationsname ist auf 128 Zeichen im UTF-16-Format beschränkt.
- Der erstellte Anmeldeinformationsname muss den Bucketnamen enthalten, es sei denn, diese Anmeldeinformation ist für eine neue externe Datenquelle vorgesehen.
- Zugriffstasten-ID und „Geheimer Schlüssel“-ID dürfen nur alphanumerische Werte enthalten.
Pass-Through-Autorisierung (STS)
Ein S3-kompatibler Objektspeicher hat die Möglichkeit, mit Hilfe des Secure Token Service (STS) einen temporären Berechtigungsnachweis zu vergeben. Diese Anmeldeinformationen werden kurzfristig und dynamisch generiert.
Die Pass-Through-Autorisierung basiert auf Active Directory-Verbunddienste (ADFS), der als OpenID Connect (OIDC)-Identitätsanbieter fungiert. Es liegt in der Verantwortung der ADFS, mit dem S3-kompatiblen Objektspeicher-STS zu kommunizieren, den STS anzufordern und zurück an SQL Server bereitzustellen.
Verwenden der Pass-Through-Autorisierung (STS) auf SQL Server
TLS muss mit Zertifikaten zwischen SQL Server und dem S3-kompatiblen Host-Server konfiguriert werden. Es wird vorausgesetzt, dass alle Verbindungen sicher über HTTPS (nicht über HTTP) übertragen werden. Der Endpunkt wird anhand eines Zertifikats überprüft, das auf dem SQL Server-Betriebssystemhost installiert ist. Öffentliche oder selbstsignierte Zertifikate werden unterstützt.
Erstellen Sie datenbankbezogene Anmeldedaten, an die die Identität an den S3-kompatiblen Objektspeicher übergeben wird. Weitere Informationen finden Sie unter CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). So wie folgendes Beispiel:
CREATE DATABASE SCOPED CREDENTIAL CredName WITH IDENTITY = 'User Identity'
Erstellen Sie eine externe Datenquelle, um auf den S3-kompatiblen Objektspeicher zuzugreifen. Verwenden Sie
CONNECTION_OPTIONS
als JSON-Format, um die erforderlichen Informationen sowohl für die ADFS als auch für STS zu informieren. Weitere Informationen finden Sie unter CREATE EXTERNAL DATA SOURCE (CREATE EXTERNAL DATA SOURCE). So wie folgendes Beispiel: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
-Optionen geben den Windows-Datentransport-Endpunkt und den Bezeichnerrelying_party
von SQL Server in ADFS an.STS
-Optionen geben einen S3-kompatiblen Objektspeicher-STS-Endpunkt und Parameter für die AnfrageAssumeRoleWithWebIdentity
an.AssumeRoleWithWebIdentity
ist die Methode zum Abrufen der temporären Sicherheitsanmeldedaten, die zur Authentifizierung verwendet werden. Die vollständige Liste der Parameter, einschließlich optionaler Parameter und Informationen zu Standardwerten, finden Sie in der STS-API-Referenz.
Verwenden der Pass-Through-Autorisierung (STS) mit Active Directory
- Markieren Sie die EIGENSCHAFTEN von SQL Server-Benutzerkonten in AD als nicht empfindlich, um Pass-Through an S3-kompatiblen Speicher zu ermöglichen.
- Zulassen der eingeschränkten Kerberos-Delegierung an ADFS-Dienste für den Benutzer im Zusammenhang mit SQL Server SPN (Dienstprinzipalnamen).
Verwenden der Pass-Through-Autorisierung (STS) mit dem Active Directory-Verbunddienste (AD FS)
- Aktivieren Sie SQL Server für Vertrauen für Anspruchsanbieter in Active Directory.
- Zulassen der Intranet-Windows-Authentifizierung als Authentifizierungsmethoden für ADFS.
- Aktivieren Sie den Windows-Datentransport-Dienstendpunkt in Ihrem Intranet.
- Aktivieren Sie OIDC-Endpunkte (OpenID Connect).
- Registrieren Sie SQL Server als Vertrauen für die vertrauende Seite.
- Bereitstellen eines eindeutiger Bezeichners.
- Legen Sie Anspruchsregeln für JWT (JSON-Webtoken) fest.
- Benutzerdefinierte Ansprüche – Diese Ansprüche können von Kunden hinzugefügt werden, wenn diese zum Ermitteln der Zugriffsrichtlinie auf der Speicherseite erforderlich sind.
- Weitere herstellerspezifische Informationen finden Sie bei Ihrem S3-kompatiblen Plattformanbieter.
Verwenden der Pass-Through-Autorisierung (STS) für S3-kompatible Objektspeicher
Befolgen Sie die Dokumentation, die vom S3-kompatiblen Speicheranbieter bereitgestellt wird, um einen externen OIDC-Identitätsanbieter einzurichten. Zum Einrichten des Identitätsanbieters werden meist folgende Werte benötigt.
- Konfigurationsendpunkt des OIDC-Anbieters.
- Fingerabdruck des OIDC-Anbieters.
- Pass-Through-Autorisierung zum S3-kompatiblen Objektspeicher
Einschränkungen der Pass-Through-Autorisierung (STS)
- Pass-Through-Autorisierung (STS) an S3-kompatible Objektspeicher wird für SQL Server-Anmeldungen mit Windows-Authentifizierung unterstützt.
- STS-Token können nicht für BACKUP an URL für S3-kompatible Objektspeicher verwendet werden.
- ADFS und SQL Server müssen sich in derselben Domäne befinden. Der ADFS-Windows-Datentransportendpunkt sollte aus dem Extranet deaktiviert werden.
- ADFS sollte denselben AD (Active Directory) wie SQL Server als Anspruchsvertrauensanbieter aufweisen.
- S3-kompatibler Speicher sollte über einen STS-Endpunktdienst verfügen, mit dem Clients temporäre Anmeldedaten mithilfe von JWT externer Identitäten anfordern können.
- OPENROWSET- und CETAS-Abfragen (Externe Tabelle als Auswahl erstellen) werden für das Parkett- und CSV-Format unterstützt.
- Standardmäßig beträgt die Verlängerungszeit für Kerberos-Tickets sieben Tage und die Lebensdauer beträgt 10 Stunden unter Windows und 2 Stunden unter Linux. SQL Server erneuert das Kerberos-Token des Benutzers für bis zu sieben Tage. Nach sieben Tagen läuft das Ticket des Benutzers ab, daher schlägt Passthrough an S3-kompatiblen Speicher fehl. In diesem Fall muss SQL Server den Benutzer erneut authentifizieren, um ein neues Kerberos-Ticket zu erhalten.
- ADFS 2019 mit Windows Server 2019 wird unterstützt.
- S3-REST-API-Aufrufe verwenden AWS-Signaturversion 4.
PolyBase auf SQL Server für Linux
Für PolyBase auf SQL Server für Linux sind mehr Konfigurationen erforderlich.
- TLS muss konfiguriert sein. Es wird vorausgesetzt, dass alle Verbindungen sicher über HTTPS (nicht über HTTP) übertragen werden. Der Endpunkt wird anhand eines Zertifikats überprüft, das auf dem SQL Server-Betriebssystemhost installiert ist.
- Die Zertifikatverwaltung unterscheidet sich unter Linux. Überprüfen und befolgen Sie die Konfiguration, die in Linux-Support für S3-kompatiblen Speicher beschrieben ist.