Sdílet prostřednictvím


Konfigurace operací hromadného importu pro SQL Server v Linuxu (Preview)

Platí pro: SQL Server 2022 (16.x) a novější verze v Linuxu

Důležité

Tato funkce je aktuálně dostupná jako ukázková verze.

Od kumulativní aktualizace 24 (CU24) pro SQL Server 2022 (16.x) a kumulativní aktualizace 3 (CU3) pro SQL Server 2025 (17.x) můžete použít roli serveru bulkadmin nebo oprávnění ADMINISTER BULK OPERATIONS k provádění operací hromadného importu dat na SQL Serveru spuštěném na Linuxu. Dříve mohli v Linuxu spustit funkci BULK INSERT nebo OPENROWSET(BULK...) pouze členové role serveru sysadmin.

SQL Server v Linuxu vynucuje další kontroly systému souborů a ověřování cest pro hromadné operace nad rámec toho, co je požadováno ve Windows. Správce musí:

  • Udělení odpovídajících oprávnění SQL Serveru uživateli
  • Udělení oprávnění systému souborů Linuxu k datovým souborům
  • Explicitně schvalte cesty adresářů pomocí mssql-conf

Předpoklady

  • SQL Server 2022 (16.x) CU24 nebo novější verze v Linuxu nebo SQL Server 2025 (17.x) CU3 nebo novější verze v Linuxu
  • Přístup pro správu k hostiteli s Linuxem
  • Přístup pro správu k instanci SQL Serveru

Konfigurace linuxového systému souborů

Než budete moct spouštět operace hromadného importu, mssql musí mít účet služby přístup pro čtení k datovým souborům v systému souborů Linuxu.

  1. Vytvořte adresář pro hromadné datové soubory:

    mkdir -p /tmp/bulkload/sales/
    
  2. Vytvořte ukázkový datový soubor:

    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. Udělte oprávnění ke čtení účtu procesu SQL Serveru (mssql) v datovém souboru:

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

Konfigurace povolených cest pomocí mssql-conf

Správce musí schvalovat adresáře, ze kterých mohou hromadné operace číst, a to pomocí nastavení bulkadmin.allowedpathslist v mssql-conf. Tato změna se projeví okamžitě a nevyžaduje restartování služby SQL Serveru.

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

Pokud chcete zadat více adresářů, oddělte každou cestu dvojtečku (:):

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

Případně můžete zadat nadřazený adresář, který umožní přístup pro všechny podadresáře.

Omezení cesty

Následující omezení platí pro cesty nakonfigurované pro hromadné operace:

  • Cesta musí být absolutní cestou. Relativní cesty obsahující . nebo .. nejsou povoleny.
  • Kořenová cesta (/) není povolená.
  • Cesta nesmí překročit 4 096 znaků.
  • Cesta nesmí obsahovat neplatné znaky (null, nový řádek, návrat na začátek řádku nebo tabulátor).
  • Symbolické odkazy nejsou povolené.
  • Cesta musí odkazovat na adresář.

Zakázané cesty

Systém blokuje některé kritické cesty návrhem. Tato umístění nemůžete použít jako zdrojové cesty k datovým souborům pro hromadné operace, i když je přidáte do seznamu povolených cest:

  • /var/opt/mssql (nebo instalační adresář SQL Serveru)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Hromadné operace, které čtou zdrojová data z těchto cest, selžou z bezpečnostních důvodů. Toto omezení se nevztahuje na ERRORFILE výstupní cestu, která ve výchozím nastavení používá datový adresář SQL Serveru.

Nastavení oprávnění SQL Serveru

Po nakonfigurování systému souborů Linuxu a povolených cest nastavte oprávnění SQL Serveru pro uživatele, který provádí hromadný import.

  1. Připojte se k instanci SQL Serveru a vytvořte ukázkovou databázi a tabulku:

    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. Vytvořte přihlášení pro uživatele hromadného importu:

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser WITH PASSWORD = '<strong_password>';
    GO
    
  3. ADMINISTER BULK OPERATIONS Udělte oprávnění nebo přidejte přihlášení k roli serveru bulkadmin. Použijte jednu z následujících možností:

    -- 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. Vytvořte uživatele databáze a udělte potřebná oprávnění k tabulce:

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

Spuštění hromadného importu

Připojte se k databázi jako přihlašovací identita BulkLoadUser a spusťte hromadný import.

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

Stejná oprávnění, konfigurace systému souborů Linux a postup schválení cesty platí pro INSERT ... SELECT * FROM OPENROWSET(BULK...) příkazy. Další informace naleznete v tématu Import hromadných dat pomocí BULK INSERT nebo OPENROWSET(BULK...).

Chování aktualizace a degradace

Od SQL Serveru 2022 (16.x) CU24 a SQL Serveru 2025 (17.x) CU3 na Linuxu podporuje SQL Server hromadné operace pomocí role bulkadmin nebo oprávnění ADMINISTER BULK OPERATIONS.

Pokud přejdete na kumulativní aktualizaci starší než SQL Server 2022 (16.x) CU24 nebo SQL Server 2025 (17.x) CU3:

  • Dříve udělená oprávnění zůstávají přiřazená, ale nejsou funkční.
  • Hromadné operace vyžadují oprávnění správce systému , stejně jako ve verzích před těmito kumulativními aktualizacemi.