Partager via


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

S’applique à : SQL Server 2025 (17.x) sur Linux

Important

Actuellement, cette fonctionnalité est uniquement disponible en tant que version préliminaire.

À compter de SQL Server 2025 (17.x) Mise à jour cumulative (CU) 3, vous pouvez utiliser le rôle serveur bulkadmin ou l’autorisation ADMINISTER BULK OPERATIONS d’effectuer des opérations d’importation de données en bloc sur SQL Server s’exécutant sur Linux. Auparavant, seuls les membres du rôle serveur sysadmin pouvaient exécuter BULK INSERT ou OPENROWSET(BULK...) sur Linux.

SQL Server sur Linux applique des vérifications supplémentaires de système de fichiers et de validation de chemin d’accès pour les opérations en bloc, au-delà de ce qui est requis sur Windows. 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 d’accès de répertoire à l’aide de mssql-conf

Prerequisites

  • SQL Server 2025 (17.x) CU 3 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 de pouvoir exécuter des opérations d’importation en bloc, le mssql compte de service doit avoir accès en lecture aux fichiers de données sur le 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 d’accès ne doit pas contenir de caractères non valides (nul, nouvelle 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 l’autorisation ou ajoutez la ADMINISTER BULK OPERATIONS connexion au rôle serveur 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 Importer des données en bloc à l’aide de BULK INSERT ou OPENROWSET(BULK...).

Comportement de mise à niveau et de rétrogradation

À compter de SQL Server 2025 (17.x) CU 3, SQL Server sur Linux prend en charge les opérations en bloc à l’aide du rôle bulkadmin ou de l’autorisation ADMINISTER BULK OPERATIONS.

Si vous désinstallez CU 3 ou passez à une mise à jour cumulative antérieure :

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