Configurar operações de importação em massa para SQL Server em Linux

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores no Linux

A partir do SQL Server 2022 (16.x) Atualização Cumulativa 27 (CU27) e do SQL Server 2025 (17.x) Atualização Cumulativa 9 (CU9), você pode usar a função de servidor fixa bulkadmin ou a permissão ADMINISTER BULK OPERATIONS para realizar operações de importação de dados em massa no SQL Server em execução no Linux. Anteriormente, apenas membros do papel fixo de servidor sysadmin podiam rodar BULK INSERT ou OPENROWSET(BULK...) no Linux.

O SQL Server em Linux impõe verificações adicionais de validação de sistemas de arquivos e caminhos para operações em massa, além do que o Windows exige. Um administrador deve:

  • Conceder permissões apropriadas do SQL Server ao usuário
  • Conceder permissões do sistema de arquivos linux nos arquivos de dados
  • Aprove de forma explícita os caminhos de diretório com mssql-conf

Pré-requisitos

  • SQL Server 2022 (16.x) 27 ou versão posterior no Linux, ou SQL Server 2025 (17.x) 9 ou versão posterior no Linux
  • Acesso administrativo ao host do Linux
  • Acesso administrativo à instância do SQL Server

Configurar o sistema de arquivos do Linux

Antes de executar operações de importação em massa, a mssql conta de serviço exige acesso de leitura aos arquivos de dados no sistema de arquivos Linux.

  1. Crie um diretório para seus arquivos de dados em massa:

    mkdir -p /tmp/bulkload/sales/
    
  2. Crie um arquivo de dados de exemplo:

    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. Conceda permissão de leitura à conta de processo do SQL Server (mssql) no arquivo de dados:

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

Configurar caminhos permitidos com mssql-conf

Um administrador deve aprovar os diretórios dos quais as operações em lote podem ler, utilizando a configuração bulkadmin.allowedpathslist em mssql-conf. Essa alteração entra em vigor imediatamente e não requer uma reinicialização de serviço do SQL Server.

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

Para especificar vários diretórios, separe cada caminho com dois-pontos (:):

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

Como alternativa, você pode especificar um diretório pai para permitir todos os subdiretórios sob ele.

Restrições de caminho

As seguintes restrições se aplicam aos caminhos configurados para operações em massa:

  • O caminho deve ser um caminho absoluto. Caminhos relativos que contêm . ou .. não são permitidos.
  • O caminho raiz (/) não é permitido.
  • O caminho não deve exceder 4.096 caracteres.
  • O caminho não deve conter caracteres inválidos (nulo, nova linha, retorno de carro ou guia).
  • Links simbólicos não são permitidos.
  • O caminho deve se referir a um diretório.

Caminhos proibidos

O sistema bloqueia alguns caminhos críticos por design. Você não pode usar esses locais como caminhos de arquivo de dados de origem para operações em massa, mesmo se adicioná-los à lista de caminhos permitidos:

  • /var/opt/mssql (ou o diretório de instalação do SQL Server)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

As operações em massa que leem dados de origem desses caminhos falham por motivos de segurança. Essa restrição não se aplica ao ERRORFILE caminho de saída, que usa o diretório de dados do SQL Server por padrão.

Configurar permissões do SQL Server

Depois de configurar o sistema de arquivos linux e os caminhos permitidos, configure as permissões do SQL Server para o usuário que executa a importação em massa.

  1. Conecte-se à instância do SQL Server e crie um banco de dados e uma tabela de exemplo:

    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. Crie um logon para o usuário de importação em massa:

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<password>';
    GO
    
  3. Conceda a permissão ADMINISTER BULK OPERATIONS ou adicione o login à função fixa de servidor bulkadmin. Use uma das seguintes opções:

    -- 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. Crie um usuário de banco de dados e conceda as permissões de tabela necessárias:

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

Executar uma importação em massa

Conecte-se ao banco de dados como logon BulkLoadUser e execute a importação em massa:

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

As mesmas permissões, a configuração do sistema de arquivos do Linux e as etapas de aprovação de caminhos se aplicam às instruções INSERT ... SELECT * FROM OPENROWSET(BULK...). Para obter mais informações, consulte Use BULK INSERT ou OPENROWSET(BULK...) para importar dados para SQL Server.

Comportamento de upgrade e downgrade

Se você fizer downgrade para uma atualização cumulativa anterior ao SQL Server 2022 (16.x) CU 24 ou ao SQL Server 2025 (17.x) CU 3:

  • As permissões concedidas anteriormente permanecem atribuídas, mas não estão funcionais.

  • Operações em massa exigem permissões de administrador de sistemas .