Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ş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.
Toplu veri dosyalarınız için bir dizin oluşturun:
mkdir -p /tmp/bulkload/sales/Ö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 EOFVeri 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.
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 ); GOToplu veri içe aktarma kullanıcısı için bir giriş oluşturun.
USE master; GO CREATE LOGIN BulkLoadUser WITH PASSWORD = '<password>'; GOİzni
ADMINISTER BULK OPERATIONSverin 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; GOVeritabanı 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.
İlgili içerik
- BULK INSERT (Transact-SQL)
- verileri SQL Server içeri aktarmak için veya OPENROWSET(BULK...) kullanın BULK INSERT
- Linux'ta SQL Server için güvenlikle ilgili dikkat edilmesi gerekenler
- Linux üzerinde SQL Server için güvenlik ve izinler rehberi
- Mssql-conf aracıyla Linux üzerinde SQL Server'ı yapılandırma