Delen via


Bulkimportbewerkingen configureren voor SQL Server in Linux (preview)

Van toepassing op: SQL Server 2025 (17.x) op Linux

Belangrijk

Deze functie is momenteel beschikbaar als preview-versie.

Vanaf SQL Server 2025 (17.x) Cumulatieve update (CU) 3, kunt u de bulkadmin-serverfunctie of de ADMINISTER BULK OPERATIONS machtiging gebruiken om bulkbewerkingen voor gegevensimport uit te voeren op SQL Server die wordt uitgevoerd op Linux. Voorheen konden alleen leden van de sysadmin-serverfunctieBULK INSERT of OPENROWSET(BULK...) uitvoeren op Linux.

SQL Server op Linux dwingt extra bestandssysteem- en padvalidatiecontroles af voor bulkbewerkingen, behalve wat vereist is in Windows. Een beheerder moet:

  • De juiste SQL Server-machtigingen verlenen aan de gebruiker
  • Linux-bestandssysteemmachtigingen verlenen voor de gegevensbestanden
  • Mappaden expliciet goedkeuren met behulp van mssql-conf

Vereiste voorwaarden

  • SQL Server 2025 (17.x) CU 3 of hoger op Linux
  • Beheerderstoegang tot de Linux-host
  • Beheerderstoegang tot het SQL Server-exemplaar

Het Linux-bestandssysteem configureren

Voordat u bulkimportbewerkingen kunt uitvoeren, moet het mssql serviceaccount leestoegang hebben tot de gegevensbestanden in het Linux-bestandssysteem.

  1. Maak een map voor uw bulkgegevensbestanden:

    mkdir -p /tmp/bulkload/sales/
    
  2. Een voorbeeldgegevensbestand maken:

    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. Leesmachtigingen verlenen aan het SQL Server-procesaccount (mssql) in het gegevensbestand:

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

Toegestane paden configureren met mssql-conf

Een beheerder moet de mappen goedkeuren waarvandaan bulkbewerkingen kunnen worden uitgevoerd met behulp van de bulkadmin.allowedpathslist instelling in mssql-conf. Deze wijziging wordt onmiddellijk van kracht en vereist geen herstart van de SQL Server-service.

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

Als u meerdere mappen wilt opgeven, scheidt u elk pad met een dubbele punt (:):

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

U kunt ook een bovenliggende directory opgeven om alle subdirectory's daaronder op te nemen.

Padbeperkingen

De volgende beperkingen gelden voor paden die zijn geconfigureerd voor bulkbewerkingen:

  • Het pad moet een absoluut pad zijn. Relatieve paden met . of .. zijn niet toegestaan.
  • Het hoofdpad (/) is niet toegestaan.
  • Het pad mag niet langer zijn dan 4.096 tekens.
  • Het pad mag geen ongeldige tekens bevatten (null, nieuwe regel, wagen terug of tab).
  • Symbolische koppelingen zijn niet toegestaan.
  • Het pad moet verwijzen naar een map.

Verboden paden

Het systeem blokkeert per ontwerp enkele kritieke paden. U kunt deze locaties niet gebruiken als brongegevensbestandspaden voor bulkbewerkingen, zelfs niet als u ze toevoegt aan de lijst met toegestane paden:

  • /var/opt/mssql (of de SQL Server-installatiemap)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Bulkbewerkingen die brongegevens van deze paden lezen, mislukken om veiligheidsredenen. Deze beperking is niet van toepassing op het ERRORFILE uitvoerpad, dat standaard gebruikmaakt van de SQL Server-gegevensmap.

SQL Server-machtigingen instellen

Nadat u het Linux-bestandssysteem en toegestane paden hebt geconfigureerd, stelt u de SQL Server-machtigingen in voor de gebruiker die de bulkimport uitvoert.

  1. Maak verbinding met het SQL Server-exemplaar en maak een voorbeelddatabase en -tabel:

    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. Maak een aanmelding voor de bulkimportgebruiker:

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser WITH PASSWORD = '<strong_password>';
    GO
    
  3. Verleen de ADMINISTER BULK OPERATIONS toestemming of voeg de login toe aan de serverfunctie bulkadmin. Gebruik een van de volgende opties:

    -- 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. Maak een databasegebruiker en verdeel de benodigde tabelmachtigingen:

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

Een bulkimport uitvoeren

Maak verbinding met de database als aanmelding BulkLoadUser en voer de bulkimport uit:

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

Dezelfde machtigingen, configuratie van Linux-bestandssysteem en stappen voor padgoedkeuring zijn van toepassing op INSERT ... SELECT * FROM OPENROWSET(BULK...) verklaringen. Zie Bulkgegevens importeren met BULK INSERT of OPENROWSET(BULK...)voor meer informatie.

Gedrag bijwerken en downgraden

Vanaf SQL Server 2025 (17.x) CU 3 ondersteunt SQL Server op Linux bulkbewerkingen met behulp van de bulkadmin-rol of ADMINISTER BULK OPERATIONS -machtiging.

Als u CU 3 verwijdert of downgradet naar een eerdere cumulatieve update:

  • Eerder verleende machtigingen blijven toegewezen, maar zijn niet functioneel.
  • Voor bulkbewerkingen zijn sysadmin-machtigingen vereist, zoals in versies vóór CU 3.