Compartilhar via


Configurar operações de importação em massa para o SQL Server no Linux (versão prévia)

Aplica-se a: SQL Server 2025 (17.x) no Linux

Importante

No momento, este recurso está em versão prévia.

A partir do SQL Server 2025 (17.x) (Atualização Cumulativa) 3, você pode usar a função de servidor bulkadmin ou a ADMINISTER BULK OPERATIONS permissão para executar operações de importação de dados em massa no SQL Server em execução no Linux. Anteriormente, somente os membros da função de servidor sysadmin podiam executar BULK INSERT ou OPENROWSET(BULK...) no Linux.

O SQL Server no Linux impõe verificações adicionais de validação de caminho e sistema de arquivos para operações em massa, além do necessário no Windows. 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
  • Aprovar explicitamente caminhos de diretório usando mssql-conf

Pré-requisitos

  • VERSÃO 3 ou posterior do SQL Server 2025 (17.x) 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 conta de mssql serviço deve ter 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 massa podem ler, usando a definiçã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 = '<strong_password>';
    GO
    
  3. Conceda a ADMINISTER BULK OPERATIONS permissão ou adicione o logon à função 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 Importar dados em massa usando BULK INSERT ou OPENROWSET(BULK...).

Comportamento de upgrade e downgrade

A partir do SQL Server 2025 (17.x) CU 3, o SQL Server no Linux dá suporte a operações em massa usando a função bulkadmin ou permissão ADMINISTER BULK OPERATIONS.

Se você desinstalar a Atualização Cumulativa 3 (CU 3) ou fizer downgrade para uma atualização cumulativa anterior:

  • As permissões concedidas anteriormente permanecem atribuídas, mas não estão funcionais.
  • As operações em massa exigem permissões de sysadmin, como nas versões anteriores à CU 3.