適用於: Linux 上的 SQL Server 2025 (17.x)
這很重要
此功能目前為預覽狀態。
從 SQL Server 2025(17.x)累積更新(CU)3 開始,你可以使用 bulkadmin 伺服器角色或權限 ADMINISTER BULK OPERATIONS 在運行於 Linux 上的 SQL Server 執行批量資料匯入操作。 過去只有系統管理員伺服器角色的成員能在 Linux 上執行 BULK INSERT 或 OPENROWSET(BULK...)。
Linux 上的 SQL Server 對批次操作還會強制執行額外的檔案系統和路徑驗證檢查,這比 Windows 上要求的還要多。 管理員必須:
- 授予使用者適當的 SQL Server 權限
- 授予 Linux 檔案系統對資料檔案的權限
- 明確核准使用
mssql-conf的目錄路徑
先決條件
- SQL Server 2025 (17.x) CU 3 或更新版本(Linux 版)
- 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 設定允許路徑
管理員必須在mssql-conf中使用bulkadmin.allowedpathslist設置以核准可供大量操作讀取的目錄。 此變更立即生效,且不需重新啟動 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字元。
- 路徑中不得包含無效字元(null、換行、回車或 tab)。
- 不允許使用符號連結。
- 路徑必須指向目錄。
禁忌之路
系統設計上會阻擋部分關鍵路徑。 即使你把這些位置加入允許路徑清單,你也不能把這些位置當作大量操作的來源資料檔案路徑:
-
/var/opt/mssql(或 SQL Server 安裝目錄) /var/opt/azcmagent/certs/var/opt/azcmagent/tokens
從這些路徑讀取來源資料的批量操作因安全考量而失敗。 此限制不適用於 ERRORFILE 輸出路徑,該路徑預設使用 SQL Server 資料目錄。
設定 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>'; GO授予
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建立資料庫使用者並授予必要的資料表權限:
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 2025(17.x)CU 3 起,Linux 上的 SQL Server 支援使用 bulkadmin 角色或 ADMINISTER BULK OPERATIONS 權限進行批量操作。
如果你卸載了 CU 3 或降級到較早的累積更新:
- 先前授予的權限仍保留在指定狀態,但無法正常運作。
- 批次操作需要系統 管理員 權限,與 CU 3 之前的版本相同。