Configuración de operaciones de importación masiva para SQL Server en Linux (versión preliminar)

Se aplica a: SQL Server 2022 (16.x) y versiones posteriores en Linux

Importante

Esta funcionalidad actualmente está en su versión preliminar.

A partir de SQL Server 2022 (16.x) Cumulative Update 24 (CU24) y SQL Server 2025 (17.x) Cumulative Update 3 (CU3), puedes utilizar el rol de servidor fijo de bulkadmin o el ADMINISTER BULK OPERATIONS permiso para realizar operaciones de importación masiva de datos en SQL Server que se ejecute en Linux. Anteriormente, solo los miembros del rol fijo de servidor sysadmin podían ejecutar BULK INSERT o OPENROWSET(BULK...) en Linux.

SQL Server en Linux impone comprobaciones adicionales de validación del sistema de archivos y de rutas para operaciones masivas, más allá de lo que Windows requiere. Un administrador debe:

  • Concesión de permisos adecuados de SQL Server al usuario
  • Concesión de permisos del sistema de archivos de Linux en los archivos de datos
  • Aprobar explícitamente rutas de directorio con mssql-conf

Prerequisites

  • SQL Server 2022 (16.x) CU24 o una versión posterior en Linux, o SQL Server 2025 (17.x) CU3 o posterior en Linux
  • Acceso administrativo al host de Linux
  • Acceso administrativo a la instancia de SQL Server

Configuración del sistema de archivos de Linux

Antes de ejecutar operaciones de importación masiva, la cuenta de servicio mssql debe tener acceso de lectura a los archivos de datos en el sistema de archivos de Linux.

  1. Cree un directorio para los archivos de datos masivos:

    mkdir -p /tmp/bulkload/sales/
    
  2. Cree un archivo de datos de ejemplo:

    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 permiso de lectura a la cuenta de proceso de SQL Server (mssql) en el archivo de datos:

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

Configuración de rutas de acceso permitidas con mssql-conf

Un administrador debe aprobar los directorios desde los que las operaciones masivas pueden leer, mediante la configuración bulkadmin.allowedpathslist en mssql-conf. Este cambio surte efecto inmediatamente y no requiere un reinicio del servicio SQL Server.

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

Para especificar varios directorios, separe cada ruta de acceso con dos puntos (:):

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

Como alternativa, puede especificar un directorio primario para permitir todos los subdirectorios en él.

Restricciones de ruta

Las restricciones siguientes se aplican a las rutas de acceso configuradas para las operaciones masivas:

  • La ruta de acceso debe ser una ruta de acceso absoluta. No se permiten rutas de acceso relativas que contengan . o ...
  • La ruta raíz (/) no está permitida.
  • La ruta de acceso no debe superar los 4096 caracteres.
  • La ruta no debe contener caracteres no válidos (nulo, salto de línea, retorno de carro o tabulación).
  • No se permiten vínculos simbólicos.
  • La ruta de acceso debe hacer referencia a un directorio.

Rutas de acceso prohibidas

El sistema bloquea algunas rutas críticas por diseño. No puede usar estas ubicaciones como rutas de acceso del archivo de datos de origen para operaciones masivas, aunque las agregue a la lista de rutas de acceso permitidas:

  • /var/opt/mssql (o el directorio de instalación de SQL Server)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Las operaciones masivas que leen datos de origen desde estas trayectorias fallan por motivos de seguridad. Esta restricción no se aplica a la ERRORFILE ruta de acceso de salida, que usa el directorio de datos de SQL Server de forma predeterminada.

Configuración de permisos de SQL Server

Después de configurar el sistema de archivos de Linux y las rutas de acceso permitidas, configure los permisos de SQL Server para el usuario que realiza la importación masiva.

  1. Conéctese a la instancia de SQL Server y cree una base de datos y una tabla de ejemplo:

    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. Cree un inicio de sesión para el usuario de importación masiva:

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<strong_password>';
    GO
    
  3. Concede el ADMINISTER BULK OPERATIONS permiso o añade el inicio de sesión al rol de servidor fijo de bulkadmin . Use una de las siguientes opciones:

    -- 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. Cree un usuario de base de datos y conceda los permisos de tabla necesarios:

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

Ejecución de una importación masiva

Conéctese a la base de datos utilizando el inicio de sesión BulkLoadUser y ejecute la importación masiva de datos:

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

Los mismos permisos, configuración del sistema de archivos Linux y los pasos de aprobación de rutas se aplican a las INSERT ... SELECT * FROM OPENROWSET(BULK...) declaraciones. Para obtener más información, consulte Usar BULK INSERT o OPENROWSET(BULK...) para importar datos a SQL Server.

Comportamiento de actualización y degradación

A partir de SQL Server 2022 (16.x) CU24 y SQL Server 2025 (17.x) CU3, SQL Server en Linux soporta operaciones masivas utilizando el rol fijo de servidor bulkadmin o ADMINISTER BULK OPERATIONS permisos.

Si cambia a una actualización acumulativa anterior a SQL Server 2022 (16.x) CU24 o SQL Server 2025 (17.x) CU3:

  • Los permisos concedidos anteriormente permanecen asignados, pero no son funcionales.
  • Las operaciones masivas requieren permisos de administrador de sistemas , como en versiones anteriores a estas actualizaciones acumulativas.