SQL Server on Linux の一括インポート操作を構成する (プレビュー)

適用対象: Linux 上の SQL Server 2022 (16.x) 以降のバージョン

Important

現在、この機能はプレビュー段階にあります。

SQL Server 2022(16.x)累積アップデート24(CU24)およびSQL Server 2025(17.x)累積アップデート3(CU3)からは、bulkadmin固定サーバーロールまたはADMINISTER BULK OPERATIONS権限を使ってLinux上で動作する中で一括データインポート操作を行うことができますSQL Server。 以前は 、sysadmin の固定サーバー役割のメンバーのみがLinux上で BULK INSERT または OPENROWSET(BULK...) を実行できました。

SQL Server on Linuxは、Windowsで求められる以上の追加ファイルシステムおよびパス検証チェックを一括操作で強制します。 管理者は次の操作を行う必要があります。

  • ユーザーに適切な SQL Server アクセス許可を付与する
  • データ ファイルに対する Linux ファイル システムのアクセス許可を付与する
  • 明示的にディレクトリパスを承認します mssql-conf

前提条件

  • Linux では SQL Server 2022 (16.x) CU24 以降のバージョン、Linux では SQL Server 2025 (17.x) CU3 以降のバージョン
  • Linux ホストへの管理アクセス
  • SQL Server インスタンスへの管理アクセス

Linux ファイル システムを構成する

一括インポート操作を実行する前に、 mssql サービスアカウントがLinuxファイルシステム上のデータファイルに読み取りアクセス権を持っている必要があります。

  1. 一括データ ファイルのディレクトリを作成します。

    mkdir -p /tmp/bulkload/sales/
    
  2. サンプル データ ファイルを作成します。

    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. データ ファイルの SQL Server プロセス アカウント (mssql) に読み取りアクセス許可を付与します。

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

mssql-conf を使用して許可されるパスを構成する

管理者は、bulkadmin.allowedpathslistmssql-conf設定を使用して、一括操作の読み取り元となるディレクトリを承認する必要があります。 この変更はすぐに有効になり、SQL Server サービスを再起動する必要はありません。

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

複数のディレクトリを指定するには、各パスをコロン (:) で区切ります。

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

または、親ディレクトリを指定して、その下にあるすべてのサブディレクトリを許可することもできます。

パスの制限

一括操作用に構成されたパスには、次の制限が適用されます。

  • パスは絶対パスである必要があります。 .または..を含む相対パスは許可されません。
  • ルート パス (/) は許可されていません。
  • パスは 4,096 文字以下にする必要があります。
  • パスには無効な文字 (ヌル文字、改行、キャリッジリターン、またはタブ) を含めてはいけません。
  • シンボリック リンクは許可されません。
  • パスはディレクトリを参照する必要があります。

禁止されている経路

システムは、いくつかの重要なパスを設計によってブロックします。 許可されたパスの一覧に追加した場合でも、これらの場所を一括操作のソース データ ファイル パスとして使用することはできません。

  • /var/opt/mssql (または SQL Server インストール ディレクトリ)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

これらのパスからソース データを読み取る一括操作は、セキュリティ上の理由から失敗します。 この制限は、既定で SQL Server データ ディレクトリを使用する ERRORFILE 出力パスには適用されません。

SQL Server のアクセス許可を設定する

Linux ファイル システムと許可パスを構成したら、一括インポートを実行するユーザーに対して SQL Server のアクセス許可を設定します。

  1. SQL Server インスタンスに接続し、サンプル データベースとテーブルを作成します。

    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. 一括インポート ユーザーのログインを作成します。

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<strong_password>';
    GO
    
  3. ADMINISTER BULK OPERATIONS権限を付与するか、ログインをbulkadmin固定サーバーロールに追加してください。 次のいずれかのオプションを使用します。

    -- 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. データベース ユーザーを作成し、必要なテーブルのアクセス許可を付与します。

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

一括インポートを実行する

BulkLoadUser ログインとしてデータベースに接続し、一括インポートを実行します。

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

同じアクセス許可、Linux ファイル システムの構成、パスの承認手順が、 INSERT ... SELECT * FROM OPENROWSET(BULK...) ステートメントに適用されます。 詳細については、「BULK INSERTまたは OPENROWSET(BULK...) を使用してデータをSQL Serverにインポートする」を参照してください。

アップグレードとダウングレードの動作

2022 SQL Server(16.x)CU24およびSQL Server 2025(17.x)CU3からSQL Server on Linuxは、bulkadmin固定サーバーロールまたはADMINISTER BULK OPERATIONS権限を用いてバルク操作をサポートしています。

SQL Server 2022 (16.x) CU24 または SQL Server 2025 (17.x) CU3 より前の累積的な更新プログラムにダウングレードする場合:

  • 以前に付与されたアクセス許可は割り当てられたままですが、機能しません。
  • バルク操作は、これらの累積更新以前のバージョンと同様に システム管理者 権限を必要とします。