Warum erhalte ich UnauthorizedAccessException mit einigen Anwendungspoolidentitäten, wenn ich SPSiteCollection.Add in Sharepoint 2010 verwenden möchten?

StackOverflow https://stackoverflow.com/questions/4450711

Frage

Der Hintergrund dieser Frage ist, dass meine aktuelle Aufgabe ist es, eine Anwendungsseite zu entwickeln, die die Benutzer Websitesammlungen erstellen kann. Die Eigenschaften der Websitesammlung aus einer Liste Artikel lesen. Meine Lösung funktioniert in den meisten Fällen. Allerdings gibt es eine Konfiguration von Anwendungspoolidentitäten, wo es wirft ein Zugriff verweigert und ich möchte verstehen, warum dies geschieht.

A (sehr) abgespeckte Version von mein Code sieht wie folgt aus:

SPSecurity.RunWithElevatedPrivileges(delegate { try 
{
  SPWebApplication webApp = this.Web.Site.WebApplication;
  SPSiteCollection siteColl = webApp.Sites;

  SPSite newSite = siteColl.Add(mngPath + siteUrl, siteName, siteDesc, LocaleId, 
                                null, primarySiteAdmin, String.Empty, 
                                String.Empty));
});

Die UnauthorizedAccessException ausgelöst wird, wenn die Identitäten festgelegt sind, wie folgend:


Sharepoint-Zentraladministration v4 -> localdomain \ Adminaccount

Sharepoint - 80 -> NetworkService-


Alle anderen Kombinationen von Networkservice und Domain \ Adminaccount tun Arbeit. Dose jemand eine explenation für das?

UPDATE

Ich denke, dass Sie zu Ihrem Sharepoint-app-Pool mit dem gleichen Benutzer wie der zentralen Verwaltung app-Pool laufen, um auf der DB über ausreichende Rechte zu haben. Aber das erklärt immer noch nicht, warum es unter der folgenden Konfiguration funktioniert:


Sharepoint-Zentraladministration v4 -> NetworkService-

Sharepoint - 80 -> localdomain \ Adminaccount


BTW, stellt eine weitere Frage auf SA eine Lösung (und einige weitere Details des Problems). Siehe Genehmigung zur Bereitstellung neuer Websitesammlung durch Workflow .

War es hilfreich?

Lösung

Code unter RunWithElevatedPrivileges wird unter Verwendung der Anmeldeinformationen von Th AppPool Konto der Web-Anwendung ausgeführt, unter dem Ihr Code ausgeführt wird. Best Practice ist es, immer Service-Domänenkonten für anwendungs ??Pool. In Ihrem Fall ein Konto muss den Eintritt in einige der Gruppen, die durch die Sharepoint auf dem Server erstellt werden, fehlen oder nicht die entsprechenden Rechte für die Datenbank mit sein

Andere Tipps

Ok das Problem waren der Zugang DB Rechte für den Benutzer meiner Anwendung Seite der Host-Web-Anwendungen app-Pool ausgeführt wird. Das Farm-Konto (offensichtlich) hat db_owner Rechte auf dem Admincontent und _config Datenbanken. Das ist, warum es funktioniert, wenn beiden Anwendungspools ausgeführt werden, um den gleichen Benutzer verwendet wird.

Der Grund, warum es funktionierte auch unter folgenden Bedingungen nutzen ...


Sharepoint-Zentraladministration v4 -> NetworkService-

Sharepoint - 80 -> localdomain \ Adminaccount


... ist, dass mein lokales Admin-Konto auch db_owner Rechte hatte. Ich habe keine Ahnung, warum es diese Rechte hat, habe ich nie mit DB Zugriffsrechte auf meinem eigenen getüftelt. Ich habe es nur einmal die Farm Konto, aber ich geändert, dass bald nach.

Ich würde folgt aussehen in 1) Privilegien für den erhöhten Benutzer an das Ziel contedb 2) gewähren die erhöhten Benutzer (der Host-Web-Anwendungen app-Pool-Konto des Anwendungsseite) Rechte als dbcreator, wenn das Skript erstellt Datenbanken.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top