適用対象: Linux 上の SQL Server 2022 (16.x) 以降のバージョン
Important
現在、この機能はプレビュー段階にあります。
SQL Server 2022 (16.x) Cumulative Update 24 (CU24) および SQL Server 2025 (17.x) Cumulative Update 3 (CU3) 以降では、 bulkadmin サーバー ロールまたは ADMINISTER BULK OPERATIONS アクセス許可を使用して、Linux 上で実行されている SQL Server で一括データ インポート操作を実行できます。 以前は、linux で BULK INSERT または OPENROWSET(BULK...) を実行できるのは、sysadmin サーバー ロールのメンバーだけです。
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 ファイル システム上のデータ ファイルへの読み取りアクセス権が必要です。
一括データ ファイルのディレクトリを作成します。
mkdir -p /tmp/bulkload/sales/サンプル データ ファイルを作成します。
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データ ファイルの SQL Server プロセス アカウント (
mssql) に読み取りアクセス許可を付与します。setfacl -m u:mssql:r /tmp/bulkload/sales/loadsalesdata.csv
mssql-conf を使用して許可されるパスを構成する
管理者は、bulkadmin.allowedpathslistのmssql-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 のアクセス許可を設定します。
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一括インポート ユーザーのログインを作成します。
USE master; GO CREATE LOGIN BulkLoadUser WITH PASSWORD = '<strong_password>'; GOADMINISTER 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データベース ユーザーを作成し、必要なテーブルのアクセス許可を付与します。
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 (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 より前の累積的な更新プログラムにダウングレードする場合:
- 以前に付与されたアクセス許可は割り当てられたままですが、機能しません。
- 一括操作には、これらの累積的な更新プログラムより前のバージョンと同様に、 sysadmin アクセス許可が必要です。