Aracılığıyla paylaş


Linux üzerinde SQL Server için toplu içeri aktarma işlemlerini yapılandırma (önizleme)

Şunlar için geçerlidir: Linux üzerinde SQL Server 2025 (17.x)

Önemli

Bu özellik şu anda önizlemededir.

SQL Server 2025 (17.x) Toplu Güncelleştirme (CU) 3'den başlayarak , bulkadmin sunucu rolünü veya ADMINISTER BULK OPERATIONS Linux üzerinde çalışan SQL Server üzerinde toplu veri içeri aktarma işlemlerini gerçekleştirmek için izni kullanabilirsiniz. Daha önce yalnızca sysadmin sunucu rolünün üyeleri Linux üzerinde BULK INSERT veya OPENROWSET(BULK...) çalıştırabiliyor.

Linux üzerinde SQL Server, Windows'ta gerekenlerin ötesinde toplu işlemler için ek dosya sistemi ve yol doğrulama denetimleri 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ı kullanarak mssql-conf açıkça onaylayın

Önkoşullar

  • Linux'ta SQL Server 2025 (17.x) CU 3 veya üzeri 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 içeri aktarma işlemlerini mssql çalıştırabilmeniz için önce hizmet hesabının Linux dosya sistemindeki veri dosyalarına okuma erişimine sahip olması gerekir.

  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 = '<strong_password>';
    GO
    
  3. ADMINISTER BULK OPERATIONS İzin verin veya oturum açma bilgilerini bulkadmin 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. BULK INSERT veya OPENROWSET(BULK...) kullanarak toplu verileri içeri aktarma.

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

SQL Server 2025 (17.x) CU 3'den başlayarak, Linux üzerinde SQL Server bulkadmin rolünü veya ADMINISTER BULK OPERATIONS iznini kullanarak toplu işlemleri destekler.

CU 3'i kaldırırsanız veya önceki bir toplu güncelleştirmeye düşürerseniz:

  • Daha önce verilen izinler atanmış olarak kalır ancak işlevsel değildir.
  • Toplu işlemler, CU 3'ün önceki sürümlerinde olduğu gibi sysadmin izinleri gerektirir.