Linux üzerinde SQL Server için toplu import işlemlerini yapılandırma

Şunlar için geçerlidir: Linux'ta SQL Server 2022 (16.x) ve sonraki sürümleri

SQL Server 2022 (16.x) Kumülatif Güncelleme 27 (CU27) ve SQL Server 2025 (17.x) Kumülatif Güncelleme 9 (CU9) ile başlayarak, bulkadmin sabit sunucu rolünü veya ADMINISTER BULK OPERATIONS Linux üzerinde çalışan SQL Server'da toplu veri aktarma işlemlerini gerçekleştirme iznini kullanabilirsiniz. Daha önce, Linux'ta BULK INSERT veya OPENROWSET(BULK...) komutunu yalnızca sysadmin sabit sunucu rolünün üyeleri çalıştırabilirdi.

Linux üzerinde SQL Server, Windows'un gerektirenlerin ötesinde toplu işlemler için ek dosya sistemi ve yol doğrulama kontrolleri uygular. Bir yöneticinin şunları yapması gerekir:

  • Kullanıcıya uygun SQL Server izinleri verme
  • Veri dosyalarında Linux dosya sistemi izinleri verme
  • Dizin yollarını açıkça onaylayın mssql-conf

Prerequisites

  • SQL Server 2022 (16.x) CU 27 veya daha sonraki Linux sürümleri veya Linux üzerinde SQL Server 2025 (17.x) CU 9 veya daha sonraki sürüm
  • Linux konağına yönetici erişimi
  • SQL Server örneğine yönetici erişimi

Linux dosya sistemini yapılandırma

Toplu aktarma işlemlerini başlatmadan önce, mssql hizmet hesabı Linux dosya sistemindeki veri dosyalarına okuma erişimi gerektirir.

  1. Toplu veri dosyalarınız için bir dizin oluşturun:

    mkdir -p /tmp/bulkload/sales/
    
  2. Örnek veri dosyası oluşturma:

    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. Veri dosyasında SQL Server işlem hesabına (mssql) okuma izni verin:

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

mssql-conf ile izin verilen yolları yapılandırma

Yöneticinin, bulkadmin.allowedpathslist ayarını kullanarak toplu işlemlerin okuyabileceği dizinleri onaylaması gerekiyor mssql-conf. Bu değişiklik hemen geçerli olur ve SQL Server hizmetinin yeniden başlatılmasını gerektirmez.

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

Birden çok dizin belirtmek için her yolu iki nokta üst üste (:):

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

Alternatif olarak, altındaki tüm alt dizinlere izin vermek için bir üst dizin belirtebilirsiniz.

Yol kısıtlamaları

Toplu işlemler için yapılandırılan yollara aşağıdaki kısıtlamalar uygulanır:

  • Yol mutlak bir yol olmalıdır. . veya .. içeren göreli yollar izin verilmez.
  • Kök yola (/) izin verilmez.
  • Yol 4.096 karakteri aşmamalıdır.
  • Yol geçersiz karakterler (boş değer, yeni satır, satır başı veya sekme) içermemelidir.
  • Sembolik bağlantılara izin verilmez.
  • Yol bir dizini işaret etmelidir.

Yasak yollar

Sistem bazı kritik yolları tasarım gereği engeller. Bu konumları izin verilen yollar listesine ekleseniz bile toplu işlemler için kaynak veri dosyası yolları olarak kullanamazsınız:

  • /var/opt/mssql (veya SQL Server yükleme dizini)
  • /var/opt/azcmagent/certs
  • /var/opt/azcmagent/tokens

Bu yollardan kaynak verileri okuyan toplu işlemler güvenlik nedeniyle başarısız olur. Bu kısıtlama, varsayılan olarak SQL Server veri dizinini ERRORFILE kullanan çıkış yolu için geçerli değildir.

SQL Server izinlerini ayarlama

Linux dosya sistemini ve izin verilen yolları yapılandırdıktan sonra, toplu içeri aktarmayı gerçekleştiren kullanıcı için SQL Server izinlerini ayarlayın.

  1. SQL Server örneğine bağlanın ve örnek bir veritabanı ve tablo oluşturun:

    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. Toplu veri içe aktarma kullanıcısı için bir giriş oluşturun.

    USE master;
    GO
    
    CREATE LOGIN BulkLoadUser
    WITH PASSWORD = '<password>';
    GO
    
  3. İzni ADMINISTER BULK OPERATIONS verin veya girişi bulkadmin sabit sunucu rolüne ekleyin. Aşağıdaki seçeneklerden birini kullanın:

    -- 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. Veritabanı kullanıcısı oluşturun ve gerekli tablo izinlerini verin:

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

Toplu içe aktarma işlemi başlatma

Oturum açma olarak veritabanına bağlanın BulkLoadUser ve toplu içeri aktarmayı çalıştırın:

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

İzinler, Linux dosya sistemi yapılandırması ve yol onay adımları INSERT ... SELECT * FROM OPENROWSET(BULK...) ifadeleri için aynıdır. Daha fazla bilgi için bkz.: SQL Server’a veri aktarmak için BULK INSERT veya OPENROWSET(BULK...) kullanma.

Yükseltme ve düşürme davranışı

SQL Server 2022 (16.x) CU 24 veya SQL Server 2025 (17.x) CU 3'ten önceki kümülatif güncellemeye düşürürseniz:

  • Daha önce verilen izinler atanmış olarak kalır ancak işlevsel değildir.

  • Toplu işlemler için sysadmin izinleri gerekir.