Sdílet prostřednictvím


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

Platí pro: SQL Server 2025 (17.x) v Linuxu

Důležité

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

Od kumulativní aktualizace SQL Serveru 2025 (17.x) 3 můžete použít roli serveru bulkadmin nebo oprávnění k provádění operací hromadného ADMINISTER BULK OPERATIONS importu dat na SQL Serveru spuštěném v 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 2025 (17.x) CU 3 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 verze SQL Server 2025 (17.x) CU 3, SQL Server v systému Linux podporuje hromadné operace pomocí role bulkadmin nebo oprávnění ADMINISTER BULK OPERATIONS.

Pokud odinstalujete CU 3 nebo přejdete na starší kumulativní aktualizaci:

  • 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 CU 3.