Delen via


Bulkimportbewerkingen configureren voor SQL Server in Linux (preview)

Van toepassing op: SQL Server 2022 (16.x) en latere versies op Linux

Belangrijk

Deze functie is momenteel beschikbaar als preview-versie.

Vanaf SQL Server 2022 (16.x) Cumulatieve update 24 (CU24) en SQL Server 2025 (17.x) Cumulatieve update 3 (CU3), kunt u de serverrol bulkadmin of de ADMINISTER BULK OPERATIONS machtiging gebruiken om bulkbewerkingen voor het importeren van gegevens 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 2022 (16.x) CU24 of hoger op Linux of SQL Server 2025 (17.x) CU3 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 2022 (16.x) CU24 en SQL Server 2025 (17.x) CU3 ondersteunt SQL Server op Linux bulkbewerkingen met behulp van de bulkadmin-rol of ADMINISTER BULK OPERATIONS -machtiging.

Als u een downgrade uitvoert naar een cumulatieve update ouder dan SQL Server 2022 (16.x) CU24 of SQL Server 2025 (17.x) CU3:

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