Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Применимо к: SQL Server 2022 (16.x) и более поздних версий в Linux
Это важно
Эта функция сейчас доступна в предварительной версии.
Начиная с накопительного обновления 24 (CU24) SQL Server 2022 (16.x) и накопительного обновления 3 (CU3) SQL Server 2025 (17.x), можно использовать роль сервера bulkadmin или разрешение ADMINISTER BULK OPERATIONS для выполнения операций массового импорта данных в SQL Server, работающем в Linux. Ранее только члены роли сервера sysadmin могли запускать BULK INSERT или OPENROWSET(BULK...) в Linux.
SQL Server в Linux применяет дополнительные проверки файловой системы и пути для массовых операций, помимо необходимых в Windows. Администратор должен:
- Предоставление пользователю соответствующих разрешений SQL Server
- Предоставление разрешений файловой системы Linux для файлов данных
- Явное утверждение путей к каталогу с помощью
mssql-conf
Необходимые условия
- SQL Server 2022 (16.x) CU24 или более поздней версии в Linux или SQL Server 2025 (17.x) CU3 или более поздней версии в 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 2022 (16.x) CU24 и SQL Server 2025 (17.x) CU3, SQL Server на Linux поддерживает массовые операции с помощью роли bulkadmin или разрешения ADMINISTER BULK OPERATIONS.
При понижении до накопительного обновления, предшествующего SQL Server 2022 (16.x) CU24 или SQL Server 2025 (17.x) CU3:
- Ранее предоставленные разрешения остаются назначенными, но не работают.
- Для массовых операций требуются разрешения sysadmin , как и в версиях до этих накопительных обновлений.