Konfigurace hromadných importních operací pro SQL Server on Linux

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

Počínaje kumulativní aktualizací 27 (CU27) pro SQL Server 2022 (16.x) a kumulativní aktualizací 9 (CU9) pro SQL Server 2025 (17.x) můžete k provádění operací hromadného importu dat v SQL Serveru spuštěném v systému Linux použít pevnou serverovou roli bulkadmin nebo oprávnění ADMINISTER BULK OPERATIONS. Dříve mohli pouze členové role správce pevného serveru spustit BULK INSERT nebo OPENROWSET(BULK...) na Linuxu.

SQL Server v systému Linux vynucuje pro hromadné operace dodatečné kontroly souborového systému a cest navíc oproti tomu, co vyžaduje systém 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ě schvalujte adresářové cesty pomocí mssql-conf

Předpoklady

  • SQL Server 2022 (16.x) CU 27 nebo novější verze na Linuxu, nebo SQL Server 2025 (17.x) CU 9 nebo novější verze na 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ž spustíte hromadné importní operace, mssql servisní účet vyžaduje přístup ke čtení datových souborů v souborovém systému Linux.

  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 = '<password>';
    GO
    
  3. Udělte oprávnění ADMINISTER BULK OPERATIONS nebo přidejte přihlášení do pevné role 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 Použití BULK INSERT nebo OPENROWSET(BULK...) k importu dat do SQL Server.

Chování aktualizace a degradace

Pokud downgradujete na kumulativní aktualizaci dřívější než SQL Server 2022 (16.x) CU 24 nebo SQL Server 2025 (17.x) CU 3:

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