Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
Vytvořte adresář pro hromadné datové soubory:
mkdir -p /tmp/bulkload/sales/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 EOFUdě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.
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 ); GOVytvořte přihlášení pro uživatele hromadného importu:
USE master; GO CREATE LOGIN BulkLoadUser WITH PASSWORD = '<strong_password>'; GOADMINISTER BULK OPERATIONSUdě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; GOVytvoř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.