Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2022 (16.x) и более поздних версий в Linux
Начиная с SQL Server 2022 (16.x) Cumulative Update 27 (CU27) и SQL Server 2025 (17.x) Cumulative Update 9 (CU9), вы можете использовать роль bulkadmin fixed server или разрешение ADMINISTER BULK OPERATIONS для массового импорта данных на SQL Server, работающем на Linux. Ранее только участники фиксированной серверной роли sysadmin могли выполнять BULK INSERT или OPENROWSET(BULK...) в Linux.
SQL Server на Linux обеспечивает дополнительные проверки файловой системы и проверки путей для массовых операций, выходящих за рамки требований Windows. Администратор должен:
- Предоставление пользователю соответствующих разрешений SQL Server
- Предоставление разрешений файловой системы Linux для файлов данных
- Явно одобряйте пути каталогов с
mssql-conf
Prerequisites
- SQL Server 2022 (16.x) CU 27 или более поздняя версия на Linux, или SQL Server 2025 (17.x) CU 9 или более поздняя версия на Linux
- Административный доступ к узлу Linux
- Административный доступ к экземпляру SQL Server
Настройка файловой системы Linux
Перед выполнением операций массового импорта учётная запись службы mssql должна иметь доступ на чтение к файлам данных в файловой системе Linux.
Создайте каталог для файлов массовых данных:
mkdir -p /tmp/bulkload/sales/Создайте пример файла данных:
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Предоставьте разрешение на чтение учетной записи процесса 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 для пользователя, выполняющего массовый импорт.
Подключитесь к экземпляру 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Создайте имя входа для пользователя массового импорта:
USE master; GO CREATE LOGIN BulkLoadUser WITH PASSWORD = '<password>'; GOПредоставьте разрешение
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Создайте пользователя базы данных и предоставьте необходимые разрешения на таблицу:
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) CU 24 или SQL Server 2025 (17.x) CU 3:
Ранее предоставленные разрешения остаются назначенными, но не работают.
Массовые операции требуют разрешений системного администратора .