Konfigurasikan delegasi tanpa kendala untuk BULK INSERT

12

Saya memiliki sepasang node Microsoft SQL Server 2016 di Grup Ketersediaan Selalu Aktif. Saya mencoba untuk melakukan BULK INSERT(menggunakan query SQL Server 2016 Management Studio) pada file yang terletak di Cluster Failover Server File Windows Server 2016, tetapi saya mendapatkan kesalahan berikut:

Msg 4861, Level 16, Negara 1
Tidak dapat memuat massal karena file "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt" tidak dapat dibuka. Kode kesalahan sistem operasi 5 (Akses ditolak.).

Ini akan terjadi terlepas jika saya menggunakan nama simpul aktif ( nas2.my.domain) atau pendengar gugus failover ( nas.my.domain).

Setelah melihat-lihat saya menemukan ini karena SQL Server tidak dapat menyamar sebagai akun pengguna saya terhubung dengan karena nuansa BULK INSERT.

Jika Anda tersambung ke SQL Server menggunakan Windows Authentication, akun layanan SQL Server mencoba menyamar sebagai akun pengguna Anda saat menyambung ke server file. Jika Anda terhubung menggunakan otentikasi SQL Server, itu akan terhubung ke server file sebagai akun layanan SQL Server.

Jika pendelegasian dan peniruan identitas tidak dikonfigurasi dengan benar (keadaan default), layanan SQL Server tidak akan dapat menyamar sebagai akun pengguna Anda dan akan kembali mencoba menyambung ke server file sebagai pengguna anonim.

Ini dapat dikonfirmasi dengan melihat melalui log peristiwa keamanan di server file. Fakta-fakta ini bersama dengan panduan untuk mengkonfigurasi delegasi yang tidak dibatasi dan dibatasi didokumentasikan dalam tautan ini:

Saya sudah mencoba mengikuti petunjuk dalam panduan thesqldude tetapi masih tidak berfungsi.

Basis data yang saya coba BULK INSERTbukan bagian dari grup ketersediaan sehingga hanya simpul MSSQL1 yang relevan. File Server aktif pada node NAS2. Memeriksa log peristiwa pada server file memang menunjukkan bahwa ia masih mengalami masalah ini dan SQL Server sedang mencoba untuk mengautentikasi ke server file sebagai pengguna anonim daripada meniru akun pengguna saya.

Adakah yang tahu apa yang salah? Atau jika ada sesuatu yang berubah di SQL Server 2016 untuk membuat panduan ini menjadi usang?

Saya dapat mengkonfirmasi bahwa GPO ini telah diterapkan ke MSSQL1 via gpresult.exe /R, dan kedua SQL dan File Server node reboot setelah itu untuk memastikan semua cache telah dihapus.

Muh Fugen
sumber
1
Dua pertanyaan: 1) Apakah Anda mencoba mengaktifkan akun Windows Domain pribadi Anda untuk Delegasi ?, 2) Ketika Anda terhubung ke SQL Server melalui SSMS, apakah Anda masuk ke server (mis. Remote Desktop) yang sedang dijalankan dan tersambung oleh SQL Server secara lokal, atau masuk ke workstation Anda dan menghubungkan ke SQL Server dari jarak jauh? Jika Anda belum mencoba masuk ke server secara langsung dan menghubungkan secara lokal melalui SSMS, coba itu. Jika Anda belum mencoba mengaktifkan akun domain untuk didelegasikan, coba itu.
Solomon Rutzky

Jawaban:

1

Konfigurasi Anda terlihat solid. SPN dan Delegasi dikonfigurasikan seperti yang akan saya lakukan sendiri.

Satu-satunya hal yang belum Anda jelaskan adalah izin file / share. Di sinilah solusi saya masuk.

Solusi 1 (Akun Pribadi)

  1. Verifikasi bahwa akun pribadi Anda diizinkan untuk mengakses file di berbagi server file
    • akun pribadi Anda memerlukan setidaknya izin BACA pada tingkat izin berbagi atau dalam kebanyakan kasus Anda mungkin melihat SEMUA ORANG memiliki izin BACA.
    • akun pribadi Anda memerlukan setidaknya izin BACA pada tingkat izin file
    • Periksa pewarisan izin di tingkat file untuk satu file itu
      • Reboot SQL Server setelah mengubah izin file atau siklus layanan SQL Server.
    • Atau: Masuk ke SQL Server dengan akun pribadi Anda dan sambungkan ke share dan buka file.
  2. Buka SSMS dengan akun pribadi Anda .
  3. Buka koneksi ke instance SQL Server Anda dengan Windows Authentication.
    • Pastikan Anda terhubung ke instance Anda dengan akun layanan SQL Server dengan skrip yang telah Anda gunakan sebelumnya.
  4. Lakukan impor dengan BULK INSERT

Solusi 2 (Akun Layanan SQL Server)

  1. Verifikasi bahwa akun layanan SQL Server diizinkan untuk mengakses file di bagian server file
    • yang SQL Server layanan kebutuhan rekening di izin BACA setidaknya pada tingkat izin saham atau dalam kebanyakan kasus Anda mungkin melihat SEMUA ORANG yang memiliki izin BACA.
    • yang layanan SQL Server kebutuhan rekening di izin BACA setidaknya pada tingkat izin file ini
    • Periksa pewarisan izin di tingkat file untuk satu file itu
      • Reboot SQL Server setelah mengubah izin file atau siklus layanan SQL Server.
    • Atau: Masuk ke SQL Server dengan Akun Layanan SQL Server dan hubungkan ke berbagi dan buka file.
  2. Buka SSMS dengan akun layanan SQL Server .
    • Runas: domain_Anda \ SQL_Server_service_account
    • Berikan kata sandi
  3. Buka koneksi ke SQL Server Anda dengan Windows Authentication.
    • Pastikan Anda terhubung ke instance Anda dengan akun layanan SQL Server dengan skrip yang telah Anda gunakan sebelumnya.
  4. Lakukan impor dengan BULK INSERT

Izin BULK INSERT

Delegasi Akun Keamanan (Peniruan)

Jika pengguna menggunakan login SQL Server, profil keamanan akun proses SQL Server digunakan. Login menggunakan otentikasi SQL Server tidak dapat diautentikasi di luar Mesin Database. Oleh karena itu, ketika perintah BULK INSERT dimulai oleh login menggunakan otentikasi SQL Server, koneksi ke data dibuat menggunakan konteks keamanan akun proses SQL Server ( akun yang digunakan oleh layanan SQL Server Database Engine ). Agar berhasil membaca data sumber, Anda harus memberikan akun yang digunakan oleh SQL Server Database Engine, akses ke data sumber. Sebaliknya, jika pengguna SQL Server logon dengan menggunakan Otentikasi Windows, pengguna hanya dapat membaca file-file yang dapat diakses oleh akun pengguna, terlepas dari profil keamanan proses SQL Server.

Referensi: BULK INSERT (Transact-SQL)

John alias hot2use
sumber
0

Dalam pengalaman saya dengan delegasi, Akun Layanan SQL Server membutuhkan izin yang sesuai untuk berbagi yang ia coba akses atas nama Anda. Sudahkah Anda menyesuaikan izin itu? Saya pikir membaca hanya akan cukup dimuka.

Chris Lumnah
sumber