SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Bibliothek in anderer WebApp ansprechen Event Receiver

Unbeantwortet Dieser Beitrag hat 10 Antworten

Ohne Rang
163 Beiträge
Markus Sallmutter erstellt 24 Mai 2013 13:42
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Hallo Community =)

Ich versuche derzeit einen Event Receiver zu programmieren, der auf einer Bibliothek, die sich in einer anderen Web Application befindet, eine Datei zu löschen.

Getriggert wird er durch ItemUpdating was auch kein Problem ist.
Das Problem das bei mir auftritt ist, das scheinbar beim bilden des Site Objektes die API erkennt das sich die Site in einer anderen WebApplication befindet und anschließend versucht das File mit dem Application Pool User zu löschen, der allerdings nicht berechtigt ist da ich für jeden Application Pool einen eigenen User definiert habe und das soll auch so bleiben. Ich finde auch die Fehlermeldung die ich bekomme sehr interessant, da es den Anschein macht, dass versucht wird auf die Contentdatenbank zuzugreifen.

"Cannot open database "DBName" requested by the login. The login failed.
Login failed for user "domain\ApplicationPoolUser'."

Bin für jeden Tipp oder Hinweis dankbar.

LG
Markus

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Mai 2013 14:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du hast das Problem bereits selbst sehr gut analysiert und damit eigentlich auch schon die Lösung gefunden. Entweder Du gibst dem App Pool Account die notwendigen Rechte auf die andere Web App oder Du erzeugst das SPSite-Objekt im Kontext eines Benutzers mit den notwendigen Rechten.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 24 Mai 2013 14:48
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für deine Antwort Andi :)

Nun das Problem dabei ist, das das File nur gelöscht werden darf wenn der Current User die Berechtigung dazu hat.

Mit Impersonierung funktioniert es problemlos das habe ich getestet, aber dann dürfte jeder User jedes File löschen.

Deshalb wüsste ich gerne, warum er automatisch ohne mein zutun den App Pool User verwendet. Mit dem Eingeloggten User sollte es ja funktionieren, wenn er die notwendigen berechtigungen hat, dachte es wäre nichts anderes als wenn ich in der gleichen Web App bleibe, aber wie es aussieht wird automatisch der App Pool user verwendet und dies würde ich gerne unterbinden.

Ich kann leider nicht auf den CurrentUser impersonieren, da ich ja das Passwort nicht kenne...

Wenn ihr noch Ideen habt was ich probieren könnte wäre ich sehr dankbar.

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 24 Mai 2013 14:54
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Moment ich war verwirrt als ich das vorher geschrieben hab^^

Also in der eigenen WebApp verwendet er für den Zugriff auf die Contentdatenbank vermutlich auch den AppPoolUser und der ist eben berechtigt.

Das bedeutet ich muss einen Weg finden den User mit der auf die Contentdatenbank zugegriffen wird zu ändern, damit ich dort einen user angeben kann der auf allen Datenbanken Rechte hat.

Jemand ne Idee wie das geht?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Mai 2013 15:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Das alles geht relativ einfach: den aktuellen User bekommst Du aus dem aktuellen Web. Bei einem EventReceiver so:
properties.Web.CurrentUser

Zum Zugriff auf die fremde Site erstellst Du ein SPSite-Objekt, wahrscheinlich so: new SPSite("http:://webapp/site"). Der Konstruktor von SPSite hat eine Überladung, die ein SPUserToken akzeptiert und dem gibst Du einfach das Token des aktuellen Benutzers mit. Das Passwort mußt Du dazu nicht kennen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 24 Mai 2013 15:23
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Vielen Dank Andi!

Wiedemal eine ausgezeichnete Idee von dir, ich werde das gleich mal Probieren und gebe dann Feedback :)

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 24 Mai 2013 15:36
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Also ich habe meinen Code angepasst:

 SPUserToken userToken = properties.Web.CurrentUser.UserToken;

siteName = item[

 

"SiteName"].ToString();

 

 

SPWeb web = new SPSite(siteName.Replace(siteName.Substring(siteName.LastIndexOf("/")), ""),userToken).OpenWeb();

 

 

SPFile file = web.GetFile(Uri.UnescapeDataString(item["Path"].ToString()));

 

 

 

 

 

 

file.Delete();

Leider bekomme ich die selbe Fehlermeldung wie zuvor...
Ich glaube es liegt einfach daran, das die Site in einer anderen WebApp liegt, wäre toll wenn jemand das Problem nachstellen könnte, damit ich mir sicher sein kann das es nicht an meiner Farm oder meinen Datenbanken liegt.

Wichtig ist das es 2 WebApps mit verschiedenen WebAppPool Usern sind und natürlich jede eine eigene Contentdatenbank hat.

Trotzdem Danke für den Tipp Andi =)

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Mai 2013 16:05
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Zum Ausprobieren habe ich leider keine Zeit, aber könntest Du mal rein interessehalber SPUserToken.SystemAccount versuchen?

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 24 Mai 2013 16:08
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Klar mach ich.

Sorry ich weiß nicht was ich falsch mache, aber immer wenn ich Code poste sieht das aus wie frisch ausgekotzt xD

Ohne Rang
163 Beiträge
Markus Sallmutter Als Antwort am 24 Mai 2013 16:11
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Gleiches Ergebnis wie zuvor....

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 24 Mai 2013 16:50
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Markus Sallmutter"]immer wenn ich Code poste sieht das aus wie frisch ausgekotzt [/quote]

Das ist leider wirklich ein Problem hier. Am besten sieht es noch aus, wenn man den Code zuerst nach Notepad oder einen enderen Texteditor kopiert und dann erst hierher. Dabei gehen zwar alle Formatierungen verloren, aber es ist trotzdem lesbarer.

Zu Deinem eigentlichen Problem kann ich aber gerade nichts sagen. Ich bin mir zwar ziemlich sicher, daß ich das schonmal so hatte, finde aber kein passendes Projekt :-(

Viele Grüße
Andi
af @ evocom de
Blog