Masalah-masalah untuk dapat menonaktifkan Pemicu, menonaktifkan Kendala, dan mengatur IDENTITY_INSERT ON
mungkin bukan alasan besar untuk melihat ADMINISTER BULK OPERATIONS
, ADMINISTER DATABASE BULK OPERATIONS
(dimulai dengan SQL Server 2017), atau bulkadmin
peran server sebagai ancaman. Alasannya adalah bahwa untuk melakukan salah satu dari tiga hal yang baru saja disebutkan, Pengguna perlu memiliki ALTER TABLE
izin pada Tabel itu, atau pada Skema tempat Tabel itu berada. Rantai kepemilikan tidak mencakup modifikasi DDL. Jadi, jika Pengguna tidak memiliki ALTER TABLE
, maka kemampuan untuk melakukan tiga hal ini bukan masalah.
Apa yang belum dibahas sejauh ini, dan apa yang akhirnya mungkin menjadi yang masalah keamanan adalah bahwa kedua BULK INSERT
dan OPENROWSET(BULK...
akses sumber daya eksternal, di luar SQL Server. Ketika mengakses SQL Server melalui Windows Login, akun Windows itu akan ditiru (bahkan jika Anda mengganti konteks keamanan menggunakan EXECUTE AS LOGIN='...'
) untuk melakukan akses sistem file. Ini berarti bahwa Anda hanya dapat membaca file yang telah diberikan izin untuk Anda baca. Tidak ada yang salah dengan itu.
NAMUN, ketika mengakses SQL Server melalui SQL Server Login, maka akses eksternal dilakukan dalam konteks akun layanan SQL Server. Ini berarti bahwa seseorang dengan izin ini dapat membaca file yang seharusnya tidak dapat mereka baca, dan dalam folder yang seharusnya tidak dapat mereka akses.
Paling tidak, jika SQL Server dibuat untuk dijalankan sebagai akun yang dibuat hanya untuk SQL Server (metode yang disukai), maka Pengguna tersebut hanya dapat membaca file-file yang dapat diakses oleh akun "SQL Server". Meskipun ini adalah masalah terbatas, masih memungkinkan untuk membaca file seperti file log SQL Server (dan saya memang menguji contoh berikut dan itu berhasil):
SELECT tmp.[Col1]
FROM OPENROWSET(BULK
N'C:\Program Files\Microsoft SQL Server\MSSQLxx.InstanceName\MSSQL\Log\ERRORLOG.1',
SINGLE_NCLOB) tmp([Col1]);
Kebanyakan orang tidak akan memiliki akses ke folder MSSQL \ Log , jadi ini akan menjadi cara untuk menghindari batasan keamanan yang ada.
Dan, jika SQL Server berjalan sebagai Local System
akun, maka saya menduga bahwa ruang lingkup masalah hanya meningkat, dan bahwa Pengguna dengan izin ini akan dapat membaca berbagai file terkait sistem.
DAN, ini mungkin mengapa metode lain untuk melakukan impor massal - BCP dan SqlBulkCopy
- tidak memerlukan bulkadmin
izin / peran: mereka diinisiasi di luar SQL Server dan akan menangani izin sistem file sendiri. Dalam kasus tersebut, SQL Server tidak pernah membaca file (atau menjangkau di luar SQL Server), ia hanya menerima data untuk diimpor dari file yang sedang dibaca oleh proses eksternal.