none
Openrowset Bulk Load aus Freigabe RRS feed

  • Allgemeine Diskussion

  • Tach zusammen,

    Ich bin aktuell dabei ein Export/Import Konstrukt inklusive Openrowset aus einem Verzeichnis in ein anderes zu verschieben und bin auf ein merkwürdiges Verhalten gestoßen. Ich nutze Openrowset um JSON Files auszulesen und in den SQL Server (2016) zu schieben.

    Nun lagen die ganzen Files alle auf unterschiedlichen Systemen in der Freigabe "Test". Ich habe eine neue Freigabe eingerichtet (PROD) und die Berechtigungen gleichgezogen (Sowohl File als auch Freigabe). Anschließend ein Kopie der Files abgelegt und die Pfade angepasst. Kurzum: Tut nicht. Nach 1,5 Tagen Analyse bin ich soweit das mir das SQL Script den Fehler ausweist das er die Datei nicht finden kann. Ich habe daraufhin den Zugriff mit dem Benutzerkonto des SQL Servers getestet (ist ein AD Konto) und der Zugriff auf die UNC Pfade funktioniert und die Datei ist vorhanden bzw. sichtbar. Ich habe dann Testweise mal in der Freigabe "Test" ein Subfolder angelegt (Berechtigung vererbt) und die Inhalte verschoben. Aber auch da selbiges Phänomen obwohl die Pfade und die Berechtigungen korrekt gesetzt sind.

    In meinem Verständnis des KB Artikels muss der SQL Server Account Zugriff auf das Verzeichnis haben. Das hat er und trotzdem laufe ich auf den Fehler.

    Irgendwelche Tips?

    Gruss

    Timo

    Montag, 7. August 2017 15:31

Alle Antworten

  • Wenn es sich um eine Netzwerkressource (UNC-Pfad) handelt, muss die Anmeldung an den Server erfolgen.
    Dein SQL-Server hat zwar die Berechtigungen allerdings macht der keine Server-Anmeldung für den UNC-Zugriff.
    Das funktioniert nur dann, wenn du im Vordergrund (also Dialog) bereits für den Zugriff auf die Pfade angemeldet bist.
    Ggf. musst du auf Laufwerke gehen und per Script einen "net use " mit Anmeldeinformationen bereitstellen oder die benötigten Ressourcen lokal zur Verfügung stellen.

    Eine Berechtigung kann grundsätzlich nur geprüft werden, wenn auch eine Anmeldung unter dem ausführenden User am Zielserver erfolgt. Ggf. kannst du das ja auch irgendwie per Script durchführen.


    Dienstag, 8. August 2017 06:27
  • Moin bfuerchau,

    Spannend das habe ich so auch noch nicht gehört. Ich werde das mal nachher testen und melde mich nochmal.

    Danke schonmal.

    Gruss

    Timo

    Dienstag, 8. August 2017 09:35
  • Hintergrund ist hier, dass es 2 Arten der Ausführung gibt:
    a) Aufruf als angemeldeter User in deiner Domäne
    b) als Batchprocess im SQL-Server oder Task-Scheduler (Aufgabenplanung)

    Immer dann, wenn man in einer unbeaufsichtigten Anmeldung mit einem anderen User als dem benötigten etwas ausführen lassen will, benötigt man beim Zugriff auf Netzressourcen die Anmeldung am dortigen Server.
    UNC ist zwar gut und schön, aber wer macht die Anmeldung?
    Wenn du im Dialog das erste mal auf eine Netzressource zugreifst erfolgt
    a) eine automatische Anmeldung mit dem aktuellen User (implizit), falls der User auf dem Server registriert ist
    b) ein Popup-Fenster mit der Möglichkeit sich anzumelden
    Nun, b) ist im Batch einfach nicht möglich, denn da ist ja keiner und Hintergrundsitzungen haben keine sichtbaren Fenster.

    PS:
    Zu a) sei noch zu erwähnen, dass dies inzwischen auch nicht immer funktioniert.
    Bei mir habe ich bei Laufwerkszuordnungen mit automatischer Anmeldung immer ein rotes X.
    Versuche ichper Script/Programm darauf zuzugreifen funktioniert dies so lange nicht, bis ich per Dialog (Explorer) wenigstens 1x auf das Laufwerk geklickt habe.
    Bestimmt gibt es dafür wieder eine neue Group-Policity, die dies so erzwingt und wieder abgeschaltet werden muss.

    Dienstag, 8. August 2017 11:22