Pourquoi ai-je UnauthorizedAccessException avec des identités de pool d'applications si je voudrais utiliser SPSiteCollection.Add dans Sharepoint 2010?

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

Question

Le fond de cette question est que ma tâche actuelle est de développer une page d'application qui permet aux utilisateurs de créer des collections de sites. Les propriétés de la collection de sites sont lus à partir d'un élément de la liste. Ma solution fonctionne dans la plupart des cas. Cependant, il y a une configuration des identités de pool d'applications où il jette un accès refusé et je voudrais comprendre pourquoi cela se passe.

A (très) stripped-down version de mon apparence de code comme ceci:

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));
});

La UnauthorizedAccessException est levée lorsque les identités sont définies comme suit:


v4 Administration centrale de SharePoint -> localdomain \ adminaccount

SharePoint - 80 -> NetworkService


Toutes les autres combinaisons de NetworkService et domaine \ adminaccount fonctionnent. Dose quelqu'un a un explenation pour cela?

UPDATE

Je suppose que vous devez exécuter votre piscine app sharepoint en utilisant le même utilisateur que le pool d'applications d'administration centrale afin d'avoir des droits suffisants sur la base de données. Mais cela n'explique pas pourquoi cela fonctionne dans la configuration suivante:


v4 Administration centrale de SharePoint -> NetworkService

SharePoint - 80 -> localdomain \ adminaccount


BTW, une autre question sur SA fournit une solution (et quelques détails du problème). Voir L'autorisation de fourniture nouvelle collection de sites par flux de travail .

Était-ce utile?

La solution

code sous RunWithElevatedPrivileges est exécuté en utilisant les informations d'identification de compte e apppool de l'application Web en vertu de laquelle votre code est en cours d'exécution. meilleure pratique consiste à toujours utiliser des comptes de domaine de service pour-pool d'applications. Dans votre cas, l'un de compte doit manquer l'entrée dans certains des groupes créés par le sharepoint sur votre serveur ou peuvent ne pas être d'avoir les droits appropriés sur la base de données

Autres conseils

Ok le problème étaient les droits d'accès DB pour l'utilisateur exécutant mes applications web hôte de la page d'application pool d'application. Le compte agricole (évidemment) a des droits db_owner sur les bases de données et AdminContent _config. Cest pourquoi cela fonctionne lorsque les deux pools d'applications sont exécutées en utilisant le même utilisateur.

La raison pour laquelle il a également travaillé en utilisant la configuration suivante ...


v4 Administration centrale de SharePoint -> NetworkService

SharePoint - 80 -> localdomain \ adminaccount


... est que mon compte administrateur local avait aussi des droits db_owner. Je ne sais pas pourquoi il a ces droits, je ne tripotait droits d'accès DB moi-même. Je ne mets une fois pour le compte de la ferme, mais je l'ai changé que peu de temps après.

Je regarde dans ce qui suit 1) des privilèges de l'utilisateur élevée pour la cible contedb 2) accorder le droit élevé utilisateur (applications Web hôte page de l'application du compte de pool d'application) comme dbcreator si le script crée des bases de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top