Freigeben über


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

Gilt für: SQL Server 2025 (17.x) unter Linux

Von Bedeutung

Diese Funktion steht derzeit als Vorschau zur Verfügung.

Ab SQL Server 2025 (17.x) kumulatives Update (CU) 3 können Sie die Bulkadmin-Serverrolle oder die ADMINISTER BULK OPERATIONS Berechtigung zum Ausführen von Massendatenimportvorgängen auf SQL Server unter Linux verwenden. Bisher konnten nur Mitglieder der Sysadmin-ServerrolleBULK INSERT oder OPENROWSET(BULK...) unter Linux ausführen.

SQL Server unter Linux erzwingt zusätzliche Dateisystem- und Pfadüberprüfungsprüfungen für Massenvorgänge, die über die für Windows erforderlichen Anforderungen hinausgehen. Ein Administrator muss:

  • Erteilen geeigneter SQL Server-Berechtigungen für den Benutzer
  • Erteilen von Linux-Dateisystemberechtigungen für die Datendateien
  • Explizites Genehmigen von Verzeichnispfaden mithilfe von mssql-conf

Voraussetzungen

  • SQL Server 2025 (17.x) CU 3 oder höher version unter Linux
  • Administrativer Zugriff auf den Linux-Host
  • Administrativer Zugriff auf die SQL Server-Instanz

Konfigurieren des Linux-Dateisystems

Bevor Sie Massenimportvorgänge ausführen können, muss das mssql Dienstkonto über Lesezugriff auf die Datendateien im Linux-Dateisystem verfügen.

  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. Erteilen Sie die ADMINISTER BULK OPERATIONS-Berechtigung, oder fügen Sie die Anmeldung zur Bulkadmin-Serverrolle 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 Importieren von Massendaten mithilfe von BULK INSERT oder OPENROWSET(BULK...).

Upgrade- und Downgradeverhalten

Ab SQL Server 2025 (17.x) CU 3 unterstützt SQL Server unter Linux Massenvorgänge mithilfe der Bulkadmin-Rolle oder ADMINISTER BULK OPERATIONS -Berechtigung.

Wenn Sie CU 3 deinstallieren oder auf ein früheres kumulatives Update herabstufen:

  • Zuvor erteilte Berechtigungen bleiben zugewiesen, funktionieren aber nicht.
  • Massenvorgänge erfordern sysadmin-Berechtigungen , wie in Versionen vor CU 3.