Configurer des opérations d’importation en bloc pour SQL Server sur Linux (préversion)

S’applique à : SQL Server 2022 (16.x) et versions ultérieures sur Linux

Important

Cette fonctionnalité est actuellement en préversion.

À partir de SQL Server 2022 (16.x) Cumulative Update 24 (CU24) et SQL Server 2025 (17.x) Cumulative Update 3 (CU3), vous pouvez utiliser le rôle serveur fixe bulkadmin ou la ADMINISTER BULK OPERATIONS permission d’effectuer des opérations d’importation massive de données sur SQL Server sous Linux. Auparavant, seuls les membres du rôle serveur fixe sysadmin pouvaient exécuter BULK INSERT ou OPENROWSET(BULK...) sous Linux.

SQL Server sur Linux impose des vérifications supplémentaires du système de fichiers et des chemins pour les opérations en masse, au-delà de ce que Windows exige. Un administrateur doit :

  • Accorder les autorisations SQL Server appropriées à l’utilisateur
  • Accorder des autorisations de système de fichiers Linux sur les fichiers de données
  • Approuver explicitement les chemins de répertoire avec mssql-conf

Prerequisites

  • SQL Server 2022 (16.x) CU24 ou version ultérieure sur Linux, ou SQL Server 2025 (17.x) CU3 ou version ultérieure sur Linux
  • Accès administratif à l’hôte Linux
  • Accès administratif à l’instance SQL Server

Configurer le système de fichiers Linux

Avant d’effectuer des opérations d’importation en masse, le mssql compte de service doit avoir un accès en lecture aux fichiers de données du système de fichiers Linux.

  1. Créez un répertoire pour vos fichiers de données en bloc :

    mkdir -p /tmp/bulkload/sales/
    
  2. Créez un exemple de fichier de données :

    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. Accordez l’autorisation de lecture au compte de processus SQL Server (mssql) sur le fichier de données :

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

Configurer les chemins autorisés avec mssql-conf

Un administrateur doit approuver les répertoires à partir desquels les opérations en bloc peuvent lire, à l’aide du paramètre bulkadmin.allowedpathslist dans mssql-conf. Cette modification prend effet immédiatement et ne nécessite pas de redémarrage du service SQL Server.

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

Pour spécifier plusieurs répertoires, séparez chaque chemin d’accès par deux-points (:) :

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

Vous pouvez également spécifier un répertoire parent pour autoriser tous les sous-répertoires qu'il contient.

Restrictions de chemin d’accès

Les restrictions suivantes s’appliquent aux chemins configurés pour les opérations en bloc :

  • Le chemin doit être un chemin absolu. Chemins relatifs contenant . ou .. ne sont pas autorisés.
  • Le chemin racine (/) n’est pas autorisé.
  • Le chemin d’accès ne doit pas dépasser 4 096 caractères.
  • Le chemin ne doit pas contenir de caractères non valides (caractère null, saut de ligne, retour chariot ou tabulation).
  • Les liens symboliques ne sont pas autorisés.
  • Le chemin d’accès doit faire référence à un répertoire.

Chemins interdits

Le système bloque certains chemins critiques par conception. Vous ne pouvez pas utiliser ces emplacements comme chemins de fichier de données sources pour les opérations en bloc, même si vous les ajoutez à la liste des chemins d’accès autorisés :

  • /var/opt/mssql (ou le répertoire d’installation de SQL Server)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Les opérations en bloc qui lisent les données sources de ces chemins échouent pour des raisons de sécurité. Cette restriction ne s’applique pas au ERRORFILE chemin de sortie, qui utilise le répertoire de données SQL Server par défaut.

Configurer des autorisations SQL Server

Après avoir configuré le système de fichiers Linux et les chemins autorisés, configurez les autorisations SQL Server pour l’utilisateur qui effectue l’importation en bloc.

  1. Connectez-vous à l’instance SQL Server et créez un exemple de base de données et de table :

    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. Créez une connexion pour l’utilisateur d’importation en bloc :

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<strong_password>';
    GO
    
  3. Accordez la ADMINISTER BULK OPERATIONS permission ou ajoutez la connexion au rôle serveur fixe de bulkadmin . Utilisez l’une des options suivantes :

    -- 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. Créez un utilisateur de base de données et accordez les autorisations de table nécessaires :

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

Exécuter une importation en bloc

Connectez-vous à la base de données en utilisant le login BulkLoadUser et exécutez l’importation en bloc :

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

Les mêmes autorisations, la configuration du système de fichiers Linux et les étapes d’approbation de chemin d’accès s’appliquent aux INSERT ... SELECT * FROM OPENROWSET(BULK...) instructions. Pour plus d’informations, consultez Utiliser BULK INSERT ou OPENROWSET(BULK...) pour importer des données dans SQL Server.

Comportement de mise à niveau et de rétrogradation

À partir de SQL Server 2022 (16.x) CU24 et SQL Server 2025 (17.x) CU3, SQL Server sur Linux prend en charge les opérations en bloc utilisant le rôle fixe de serveur bulkadmin ou ADMINISTER BULK OPERATIONS la permission.

Si vous passez à une mise à jour cumulative antérieure à SQL Server 2022 (16.x) CU24 ou SQL Server 2025 (17.x) CU3 :

  • Les autorisations précédemment accordées restent attribuées, mais ne sont pas fonctionnelles.
  • Les opérations en bloc nécessitent des permissions sysadmin , comme dans les versions antérieures à ces mises à jour cumulatives.