Поделиться через


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

Применимо к: SQL Server 2025 (17.x) в Linux

Это важно

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

Начиная с SQL Server 2025 (17.x) Накопительный пакет обновления (CU) 3, можно использовать роль сервера bulkadmin или ADMINISTER BULK OPERATIONS разрешение на выполнение операций массового импорта данных на SQL Server, работающего в Linux. Ранее только члены роли сервера sysadmin могли запускать BULK INSERT или OPENROWSET(BULK...) в Linux.

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

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

Необходимые условия

  • SQL Server 2025 (17.x) CU 3 или более поздней версии в 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. Используйте один из следующих вариантов:

    -- 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 2025 (17.x) CU 3, SQL Server на Linux поддерживает операции массовой загрузки с помощью роли bulkadmin или разрешения ADMINISTER BULK OPERATIONS.

Если удалить CU 3 или перейти на более ранний накопительный пакет обновления:

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