Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: 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.
Создайте каталог для файлов массовых данных:
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 = '<strong_password>'; GOADMINISTER 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 2025 (17.x) CU 3, SQL Server на Linux поддерживает операции массовой загрузки с помощью роли bulkadmin или разрешения ADMINISTER BULK OPERATIONS.
Если удалить CU 3 или перейти на более ранний накопительный пакет обновления:
- Ранее предоставленные разрешения остаются назначенными, но не работают.
- Для массовых операций требуются разрешения sysadmin , как и в версиях до cu 3.