Настройка операций массового импорта для SQL Server в Linux (предварительная версия)

Применимо к: SQL Server 2022 (16.x) и более поздних версий в Linux

Important

Эта функция сейчас доступна в предварительной версии.

Начиная с SQL Server 2022 (16.x) Cumulative Update 24 (CU24) и SQL Server 2025 (17.x) Cumulative Update 3 (CU3), вы можете использовать роль bulkadmin fixed server или разрешение ADMINISTER BULK OPERATIONS для массового импорта данных на SQL Server, работающем на Linux. Ранее только члены роли системного администратора с фиксированным сервером могли запускать BULK INSERTOPENROWSET(BULK... ) на Linux.

SQL Server на Linux обеспечивает дополнительные проверки файловой системы и проверки путей для массовых операций, выходящих за рамки требований Windows. Администратор должен:

  • Предоставление пользователю соответствующих разрешений SQL Server
  • Предоставление разрешений файловой системы Linux для файлов данных
  • Явно одобряйте пути каталогов с mssql-conf

Prerequisites

  • SQL Server 2022 (16.x) CU24 или более поздней версии в Linux или SQL Server 2025 (17.x) CU3 или более поздней версии в Linux
  • Административный доступ к узлу Linux
  • Административный доступ к экземпляру SQL Server

Настройка файловой системы Linux

Перед запуском операций массового импорта mssql сервисный аккаунт должен иметь доступ к файлам данных в файловой системе Linux.

  1. Создайте каталог для файлов массовых данных:

    mkdir -p /tmp/bulkload/sales/
    
  2. Создайте пример файла данных:

    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. Предоставьте разрешение на чтение учетной записи процесса SQL Server (mssql) в файле данных:

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

Настройка разрешенных путей с помощью mssql-conf

Администратор должен утвердить каталоги, из которых массовые операции могут читаться, используя bulkadmin.allowedpathslist параметр в mssql-conf. Это изменение вступает в силу немедленно и не требует перезапуска службы SQL Server.

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

Чтобы указать несколько каталогов, разделите каждый путь двоеточием (:):

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

Кроме того, можно указать родительскую папку, чтобы разрешить доступ ко всем вложенным каталогам.

Ограничения пути

Следующие ограничения применяются к путям, настроенным для массовых операций:

  • Путь должен быть абсолютным путем. Относительные пути, содержащие . или .., не допускаются.
  • Корневой путь (/) не разрешен.
  • Путь не должен превышать 4096 символов.
  • Путь не должен содержать недопустимые символы (null, newline, возврат каретки или вкладка).
  • Символьные ссылки не допускаются.
  • Путь должен ссылаться на каталог.

Запрещенные пути

Система преднамеренно блокирует некоторые критически важные пути. Эти расположения нельзя использовать в качестве путей к файлам исходных данных для массовых операций, даже если добавить их в список разрешенных путей:

  • /var/opt/mssql (или каталог установки SQL Server)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Массовые операции, считывающие исходные данные из этих путей, завершаются сбоем по соображениям безопасности. Это ограничение не применяется к выходному ERRORFILE пути, который использует каталог данных SQL Server по умолчанию.

Настройка разрешений SQL Server

После настройки файловой системы Linux и разрешенных путей настройте разрешения SQL Server для пользователя, выполняющего массовый импорт.

  1. Подключитесь к экземпляру SQL Server и создайте пример базы данных и таблицу:

    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. Создайте имя входа для пользователя массового импорта:

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<strong_password>';
    GO
    
  3. Предоставьте ADMINISTER BULK OPERATIONS разрешение или добавьте логин в роль сервера bulkadmin fixed server. Используйте один из следующих вариантов:

    -- 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. Создайте пользователя базы данных и предоставьте необходимые разрешения на таблицу:

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

Выполнение массового импорта

Подключитесь к базе данных как BulkLoadUser логин и выполните массовый импорт:

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

Те же разрешения, конфигурация файловой системы Linux и шаги утверждения пути применяются к INSERT ... SELECT * FROM OPENROWSET(BULK...) инструкциям. Дополнительные сведения см. в разделе Использование BULK INSERT или OPENROWSET(BULK...) для импорта данных в SQL Server.

Поведение обновления и понижения версии

Начиная с SQL Server 2022 (16.x) CU24 и SQL Server 2025 (17.x) CU3, SQL Server на Linux поддерживает массовые операции с использованием роли ADMINISTER BULK OPERATIONS или разрешения сервера bulkadmin.

При понижении до накопительного обновления, предшествующего SQL Server 2022 (16.x) CU24 или SQL Server 2025 (17.x) CU3:

  • Ранее предоставленные разрешения остаются назначенными, но не работают.
  • Массовые операции требуют разрешений системного администратора , как и в версиях до этих кумулятивных обновлений.