Konfigurieren von Massenimportvorgängen für SQL Server unter Linux (Vorschau)

Gilt für: SQL Server 2022 (16.x) und höhere Versionen unter Linux

Important

Diese Funktion steht derzeit als Vorschau zur Verfügung.

Ab SQL Server 2022 (16.x) Cumulative Update 24 (CU24) und SQL Server 2025 (17.x) Cumulative Update 3 (CU3) kannst du die Bulkadmin-Fixed-Server-Rolle oder die Berechtigung ADMINISTER BULK OPERATIONS nutzen, um Massendatenimportoperationen auf SQL Server unter Linux durchzuführen. Früher konnten nur Mitglieder der Sysadmin-Fixed-Server-Rolle auf Linux ausführen oder OPENROWSET(BULK...) ausführen.BULK INSERT

SQL Server für Linux erzwingt zusätzliche Dateisystem- und Pfadvalidierungsprüfungen für Massenoperationen, über das hinaus, was Windows verlangt. Ein Administrator muss:

  • Erteilen geeigneter SQL Server-Berechtigungen für den Benutzer
  • Erteilen von Linux-Dateisystemberechtigungen für die Datendateien
  • Explizit Verzeichnispfade genehmigen mit mssql-conf

Voraussetzungen

  • SQL Server 2022 (16.x) CU24 oder höher unter Linux oder SQL Server 2025 (17.x) CU3 oder höher unter Linux
  • Administrativer Zugriff auf den Linux-Host
  • Administrativer Zugriff auf die SQL Server-Instanz

Konfigurieren des Linux-Dateisystems

Bevor Sie Massenimportoperationen ausführen, muss das mssql Servicekonto Lesezugriff auf die Datendateien im Linux-Dateisystem haben.

  1. Erstellen Sie ein Verzeichnis für Ihre Massendatendateien:

    mkdir -p /tmp/bulkload/sales/
    
  2. Erstellen einer Beispieldatendatei:

    cat > /tmp/bulkload/sales/loadsalesdata.csv << EOF
    Id,CustomerName,OrderDate,Amount
    1,John Doe,2026-02-01,500.75
    2,Jane Smith,2026-02-05,1500.20
    3,Mark Lee,2026-02-10,320.50
    4,Alice Johnson,2026-02-15,785.00
    5,Bob Brown,2026-02-20,930.40
    EOF
    
  3. Erteilen Sie leseberechtigungen für das SQL Server-Prozesskonto (mssql) in der Datendatei:

    setfacl -m u:mssql:r /tmp/bulkload/sales/loadsalesdata.csv
    

Konfigurieren zulässiger Pfade mit mssql-conf

Ein Administrator muss die Verzeichnisse genehmigen, aus denen Massenvorgänge gelesen werden können, mithilfe der bulkadmin.allowedpathslist-Einstellung in mssql-conf. Diese Änderung wird sofort wirksam und erfordert keinen NEUSTART des SQL Server-Diensts.

sudo /opt/mssql/bin/mssql-conf set bulkadmin.allowedpathslist "/tmp/bulkload/sales"

Um mehrere Verzeichnisse anzugeben, trennen Sie jeden Pfad durch einen Doppelpunkt (:):

sudo /opt/mssql/bin/mssql-conf set bulkadmin.allowedpathslist "/tmp/bulkload/sales:/tmp/bulkload/marketing"

Alternativ können Sie ein übergeordnetes Verzeichnis angeben, um alle Unterverzeichnisse zuzulassen.

Pfadeinschränkungen

Die folgenden Einschränkungen gelten für Pfade, die für Massenvorgänge konfiguriert sind:

  • Der Pfad muss ein absoluter Pfad sein. Die Verwendung relativer Pfade, die . oder .. enthalten, ist nicht zulässig.
  • Der Stammpfad (/) ist nicht zulässig.
  • Der Pfad darf 4.096 Zeichen nicht überschreiten.
  • Der Pfad darf keine ungültigen Zeichen (NULL, Zeilenumbruch, Wagenrücklauf oder Tabstopp) enthalten.
  • Symbolische Verknüpfungen sind nicht zulässig.
  • Der Pfad muss auf ein Verzeichnis verweisen.

Verbotene Pfade

Das System blockiert einige kritische Pfade nach Entwurf. Sie können diese Speicherorte nicht als Quelldatendateipfade für Massenvorgänge verwenden, auch wenn Sie sie zur Liste zulässiger Pfade hinzufügen:

  • /var/opt/mssql (oder das SQL Server-Installationsverzeichnis)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Massenvorgänge, die Quelldaten aus diesen Pfaden lesen, schlagen aus Sicherheitsgründen fehl. Diese Einschränkung gilt nicht für den ERRORFILE Ausgabepfad, der standardmäßig das SQL Server-Datenverzeichnis verwendet.

Einrichten von SQL Server-Berechtigungen

Nachdem Sie das Linux-Dateisystem und zulässige Pfade konfiguriert haben, richten Sie die SQL Server-Berechtigungen für den Benutzer ein, der den Massenimport durchführt.

  1. Stellen Sie eine Verbindung mit der SQL Server-Instanz her, und erstellen Sie eine Beispieldatenbank und -tabelle:

    CREATE DATABASE demodbforbulkinsert;
    GO
    
    USE demodbforbulkinsert;
    GO
    
    CREATE TABLE dbo.Sales
    (
        Id INT NOT NULL PRIMARY KEY,
        CustomerName NVARCHAR (200) NOT NULL,
        OrderDate DATE NOT NULL,
        Amount DECIMAL (18, 2) NOT NULL
    );
    GO
    
  2. Erstellen Sie eine Anmeldung für den Massenimportbenutzer:

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<strong_password>';
    GO
    
  3. Erteile die ADMINISTER BULK OPERATIONS Berechtigung oder füge den Login zur Bulkadmin-Fixed-Server-Rolle hinzu. Verwenden Sie eine der folgenden Optionen:

    -- Option 1: Add to the bulkadmin server role
    ALTER SERVER ROLE bulkadmin ADD MEMBER BulkLoadUser;
    GO
    
    -- Option 2: Grant the permission directly
    GRANT ADMINISTER BULK OPERATIONS TO BulkLoadUser;
    GO
    
  4. Erstellen Sie einen Datenbankbenutzer, und erteilen Sie die erforderlichen Tabellenberechtigungen:

    USE demodbforbulkinsert;
    GO
    
    CREATE USER BulkLoadUser FOR LOGIN BulkLoadUser;
    GO
    
    GRANT INSERT, SELECT
        ON dbo.Sales TO BulkLoadUser;
    GO
    

Ausführen eines Massenimports

Stellen Sie als BulkLoadUser Login eine Verbindung mit der Datenbank her, und führen Sie den Massenimport aus:

USE demodbforbulkinsert;
GO

BULK INSERT dbo.Sales
FROM '/tmp/bulkload/sales/loadsalesdata.csv'
WITH (
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',
    ERRORFILE = '/var/opt/mssql/data/bulk_errors'
);
GO

-- Verify the imported data
SELECT *
FROM dbo.Sales;
GO

Dieselben Berechtigungen, Linux-Dateisystemkonfiguration und Pfadgenehmigungsschritte gelten für INSERT ... SELECT * FROM OPENROWSET(BULK...) Anweisungen. Weitere Informationen finden Sie unter Verwenden BULK INSERT oder OPENROWSET(BULK...), um Daten in SQL Server zu importieren.

Upgrade- und Downgradeverhalten

Ab SQL Server 2022 (16.x) CU24 und SQL Server 2025 (17.x) CU3 unterstützt SQL Server für Linux Massenoperationen unter Verwendung der Bulkadmin-Fixed-Server-Rolle oder ADMINISTER BULK OPERATIONS -Berechtigung.

Wenn Sie ein Upgrade auf ein kumulatives Update vor SQL Server 2022 (16.x) CU24 oder SQL Server 2025 (17.x) CU3 ausführen:

  • Zuvor erteilte Berechtigungen bleiben zugewiesen, funktionieren aber nicht.
  • Massenoperationen erfordern Systemadministrator-Berechtigungen , wie in Versionen vor diesen kumulativen Updates.