Konfiguruj operacje masowego importu dla SQL Server on Linux

Dotyczy: SQL Server 2022 (16.x) i nowsze wersje w systemie Linux

Począwszy od SQL Server 2022 (16.x) Cumulative Update 27 (CU27) oraz SQL Server 2025 (17.x) Cumulative Update 9 (CU9), możesz korzystać z roli stałego serwera bulkadmin lub ADMINISTER BULK OPERATIONS uprawnień do wykonywania operacji masowego importu danych na SQL Server działającym na Linuksie. Wcześniej tylko członkowie stałej roli serwera sysadmin mogli uruchamiać BULK INSERT lub OPENROWSET(BULK...) w systemie Linux.

SQL Server on Linux wymusza dodatkowe kontrole systemu plików i walidacji ścieżek dla operacji masowych, wykraczając poza wymagania Windows. Administrator musi:

  • Udzielanie odpowiednich uprawnień programu SQL Server użytkownikowi
  • Udzielanie uprawnień systemu plików systemu Linux do plików danych
  • Jawnie zatwierdzaj ścieżki katalogowe z pomocą mssql-conf

Wymagania wstępne

  • SQL Server 2022 (16.x) CU 27 lub nowsza wersja na Linuksie, lub SQL Server 2025 (17.x) CU 9 lub nowsza wersja na Linuksie
  • Dostęp administracyjny do hosta systemu Linux
  • Dostęp administracyjny do wystąpienia SQL Server

Konfigurowanie systemu plików systemu Linux

Zanim wykonasz operacje importu zbiorczego, konto usługi mssql wymaga dostępu do odczytu plików danych w systemie plików Linux.

  1. Utwórz katalog dla plików danych zbiorczych:

    mkdir -p /tmp/bulkload/sales/
    
  2. Utwórz przykładowy plik danych:

    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. Udziel uprawnień do odczytu dla konta użytkownika procesu SQL Server (mssql) do pliku danych.

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

Konfigurowanie dozwolonych ścieżek za pomocą narzędzia mssql-conf

Administrator musi zatwierdzić katalogi, z których operacje zbiorcze mogą odczytywać, korzystając z ustawienia bulkadmin.allowedpathslist w mssql-conf. Ta zmiana wchodzi w życie natychmiast i nie wymaga ponownego uruchomienia usługi programu SQL Server.

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

Aby określić wiele katalogów, należy oddzielić każdą ścieżkę dwukropkiem (:):

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

Alternatywnie można określić katalog nadrzędny zezwalający na wszystkie podkatalogi pod nim.

Ograniczenia ścieżki

Następujące ograniczenia dotyczą ścieżek skonfigurowanych do operacji zbiorczych:

  • Ścieżka musi być ścieżką bezwzględną. Ścieżki względne zawierające . lub .. nie są dozwolone.
  • Ścieżka główna (/) nie jest dozwolona.
  • Ścieżka nie może przekraczać 4096 znaków.
  • Ścieżka nie może zawierać nieprawidłowych znaków (null, nowego wiersza, powrotu karetki lub karty).
  • Łącza symboliczne nie są dozwolone.
  • Ścieżka musi odwoływać się do katalogu.

Ścieżki zabronione

System blokuje kilka ścieżek krytycznych zgodnie z projektem. Nie można używać tych lokalizacji jako ścieżek pliku danych źródłowych dla operacji zbiorczych, nawet jeśli dodasz je do listy dozwolonych ścieżek:

  • /var/opt/mssql (lub katalog instalacyjny programu SQL Server)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Operacje zbiorcze odczytujące dane źródłowe z tych ścieżek kończą się niepowodzeniem ze względów bezpieczeństwa. To ograniczenie nie ma zastosowania do ścieżki wyjściowej ERRORFILE , która domyślnie używa katalogu danych programu SQL Server.

Konfigurowanie uprawnień programu SQL Server

Po skonfigurowaniu systemu plików systemu Linux i dozwolonych ścieżek skonfiguruj uprawnienia programu SQL Server dla użytkownika, który wykonuje importowanie zbiorcze.

  1. Połącz się z wystąpieniem programu SQL Server i utwórz przykładową bazę danych i 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. Utwórz identyfikator logowania dla użytkownika importu zbiorczego:

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<password>';
    GO
    
  3. Udziel uprawnienia ADMINISTER BULK OPERATIONS lub dodaj login do stałej roli serwera bulkadmin. Użyj jednej z następujących opcji:

    -- 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. Utwórz użytkownika bazy danych i przyznaj niezbędne uprawnienia do tabeli:

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

Uruchamianie importu zbiorczego

Połącz się z BulkLoadUser bazą danych, używając loginu, i uruchom importowanie zbiorcze:

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

Te same uprawnienia, konfiguracja systemu plików Linux i kroki zatwierdzania ścieżki mają zastosowanie do instrukcji INSERT ... SELECT * FROM OPENROWSET(BULK...). Aby uzyskać więcej informacji, zobacz temat Używanie BULK INSERT lub OPENROWSET(BULK...) do importowania danych do programu SQL Server.

Zachowanie uaktualniania i obniżania poziomu

Jeśli przejdziesz do aktualizacji kumulatywnej wcześniejszej niż SQL Server 2022 (16.x) CU 24 lub SQL Server 2025 (17.x) CU 3:

  • Wcześniej przyznane uprawnienia pozostają przypisane, ale nie są funkcjonalne.

  • Operacje masowe wymagają uprawnień administratora systemu .