BULK INSERT için kısıtsız temsilci seçme


12

Her Zaman Açık Kullanılabilirlik Grubunda bir çift Microsoft SQL Server 2016 düğümü var. BULK INSERTWindows Server 2016 Dosya Sunucusu Yük Devretme Kümesi'nde bulunan bir dosyada (SQL Server 2016 Management Studio sorgusu kullanarak) gerçekleştirmeye çalışıyorum , ancak aşağıdaki hatayı alıyorum:

Msg 4861, Seviye 16, Durum 1
"\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt" dosyası açılamadığından toplu yüklenemiyor. İşletim sistemi hata kodu 5 (Erişim reddedildi.).

Etkin düğüm adını ( nas2.my.domain) veya yük devretme kümesi dinleyicisini ( nas.my.domain) kullanırsam bu gerçekleşir.

Etrafa baktıktan sonra bunun SQL Server ile nüanslar nedeniyle bağlı olduğum kullanıcı hesabını taklit edemediğini öğrendim BULK INSERT.

SQL Server'a Windows Kimlik Doğrulaması kullanarak bağlanırsanız, SQL Server hizmet hesabı, dosya sunucusuna bağlanırken kullanıcı hesabınızı taklit etmeye çalışır. SQL Server kimlik doğrulaması kullanarak bağlanırsanız, dosya sunucusuna SQL Server hizmet hesabı olarak bağlanır.

Temsilci seçme ve kimliğe bürünme doğru yapılandırılmadıysa (varsayılan durum), SQL Server hizmeti kullanıcı hesabınızı taklit edemez ve dosya sunucusuna anonim bir kullanıcı olarak bağlanmaya çalışılmasına geri döner.

Bu, dosya sunucusundaki güvenlik olay günlüğüne bakarak onaylanabilir. Bu gerçekler ve kısıtsız ve kısıtlı delegasyonun yapılandırılmasıyla ilgili bir kılavuz şu bağlantılarda belgelenmiştir:

Thesqldude 's kılavuzundaki talimatları takip etmeyi denedim ama hala çalışmıyor.

Çalışmaya çalıştığım veritabanı BULK INSERTkullanılabilirlik grubunun bir parçası değil, bu nedenle yalnızca MSSQL1 düğümü alakalı olmalıdır. Dosya Sunucusu NAS2 düğümünde etkindir. Dosya sunucusundaki olay günlüğünü denetlemek, bu sorundan hala muzdarip olduğunu gösterir ve SQL Server, kullanıcı hesabımı taklit etmek yerine dosya sunucusunda anonim bir kullanıcı olarak kimlik doğrulaması yapmaya çalışır.

Neyin yanlış gittiğini bilen var mı? Veya SQL Server 2016'da bu kılavuzları geçersiz kılmak için bir şey değiştiyse?

Bu GPO'nun MSSQL1'e uygulandığını gpresult.exe /Rve önbelleklerin temizlendiğinden emin olmak için hem SQL hem de Dosya Sunucusu düğümlerinin daha sonra yeniden başlatıldığını doğrulayabilirim .


1
İki soru: 1) Kişisel Windows Etki Alanı hesabınızı Yetki Verme için etkinleştirmeyi denediniz mi? 2) SQL Server'a SSMS aracılığıyla bağlandığınızda, SQL Server'ın çalıştığı ve yerel olarak bağlandığı sunucuya (yani Uzak Masaüstü) oturum açtınız mı, veya iş istasyonunuzda oturum açıp SQL Server'a uzaktan bağlanıyor musunuz? Doğrudan sunucuda oturum açmayı ve yerel olarak SSMS aracılığıyla bağlanmayı denemediyseniz, bunu deneyin. Alan adı hesabınızı temsilci seçme için etkinleştirmeyi denemediyseniz, bunu deneyin.
Solomon Rutzky

Yanıtlar:


1

Yapılandırmanız sağlam görünüyor. SPN'ler ve Yetkilendirme, kendim yaptığım gibi yapılandırıldı.

Açıklamadığınız tek şey dosya / paylaşım izinleridir. Benim çözümüm devreye giriyor.

Çözüm 1 (Kişisel Hesap)

  1. Kişisel hesabınızın dosya sunucusunun paylaşımındaki dosyaya erişmesine izin verildiğini doğrulayın
    • kişisel hesabınızın paylaşım izni düzeyinde en az OKUMA iznine ihtiyacı vardır veya çoğu durumda HERKESİN OKUMA iznine sahip olduğunu görebilirsiniz.
    • kişisel hesabınızın dosyanın izin düzeyinde en az OKUMA iznine ihtiyacı var
    • Bu dosya için dosya düzeyinde izin devralmasını kontrol etme
      • Dosya izinlerini değiştirdikten sonra SQL Server'ı yeniden başlatın veya SQL Server hizmetinde dolaşın.
    • Alternatif olarak: SQL Server'da kişisel hesabınızla oturum açın ve paylaşıma bağlanın ve dosyayı açın.
  2. Kişisel hesabınızla SSMS'yi açın .
  3. Windows Kimlik Doğrulaması ile SQL Server örneğinizle bir bağlantı açın.
    • Daha önce kullandığınız komut dosyasıyla örneğinize SQL Server hizmet hesabıyla bağlandığınızı doğrulayın.
  4. İçe aktarmayı BULK INSERT ile gerçekleştirin

Çözüm 2 (SQL Server Hizmet Hesabı)

  1. SQL Server hizmet hesabının dosya sunucusunun paylaşımındaki dosyaya erişmesine izin verildiğini doğrulayın
    • SQL Server hizmet payı izin seviyesinde veya bu HERKES görebilirsiniz çoğu durumda az OKU izinlerine hesap ihtiyaçları OKU izinlere sahiptir.
    • SQL Server hizmet dosyanın izin düzeyiyle en az OKU izinlerine hesap ihtiyaçları
    • Bu dosya için dosya düzeyinde izin devralmasını kontrol etme
      • Dosya izinlerini değiştirdikten sonra SQL Server'ı yeniden başlatın veya SQL Server hizmetinde dolaşın.
    • Alternatif olarak: SQL Server'da SQL Server Hizmet Hesabı ile oturum açın ve paylaşıma bağlanın ve dosyayı açın.
  2. SQL Server hizmet hesabıyla SSMS'yi açın .
    • Runas: alan_adiniz \ SQL_Server_service_account
    • Şifre girin
  3. Windows Kimlik Doğrulaması ile SQL Server'ınıza bir bağlantı açın.
    • Daha önce kullandığınız komut dosyasıyla örneğinize SQL Server hizmet hesabıyla bağlandığınızı doğrulayın.
  4. İçe aktarmayı BULK INSERT ile gerçekleştirin

BULK INSERT izinleri

Güvenlik Hesabı Temsilcisi (Kimliğe Bürünme)

Kullanıcı bir SQL Server oturumu kullanıyorsa, SQL Server işlem hesabının güvenlik profili kullanılır. SQL Server kimlik doğrulamasını kullanan bir oturum açma, Veritabanı Altyapısı dışında doğrulanamaz. Bu nedenle, bir BULK INSERT komutu SQL Server kimlik doğrulaması kullanılarak bir oturum açma ile başlatıldığında, veri bağlantısı SQL Server işlem hesabının ( SQL Server Veritabanı Altyapısı hizmeti tarafından kullanılan hesap) güvenlik bağlamı kullanılarak yapılır . Kaynak verileri başarıyla okumak için SQL Server Veritabanı Altyapısı tarafından kullanılan hesaba kaynak verisi vermeniz gerekir . Buna karşılık, bir SQL Server kullanıcısı Windows Kimlik Doğrulaması kullanarak oturum açarsa , kullanıcı yalnızca kullanıcı hesabı tarafından erişilebilen dosyaları okuyabilir, SQL Server işleminin güvenlik profiline bakılmaksızın.

Referans: BULK INSERT (Transact-SQL)


0

Yetki verme deneyimimde, SQL Server Hizmet Hesabı'nın sizin adınıza erişmeye çalıştığı paylaşım için uygun izinlere ihtiyacı var. Bu izinleri ayarladınız mı? Ben sadece okumak açık yeterli olacağını düşünürdüm.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.