Accès refusé lors du déploiement d’un travail de minuteur ou de l’activation d’une fonctionnalité d’application de contenu web de SharePoint 2010


Symptômes


Vous obtenez l’accès refusé lorsque vous essayez d’activer une fonctionnalité dans le code de l’application web de SharePoint 2010. Cette erreur se produit lorsque vous essayez d’apporter des modifications à partir d’applications de contenu (sites web frontaux) à l’application de configuration (application d’administration centrale). Modifications du fichier web.config par exemple. L’accès refusé erreur se produit même lorsque vous encapsulez le code dans RunWithElevatedPrivileges.

Cause


Est une nouvelle fonctionnalité de sécurité mis en œuvre dans SharePoint 2010. Cette fonctionnalité bloque toutes les modifications aux objets héritant de SPPersistedObject dans l’espace de noms Microsoft.SharePoint.Administration explicitement et n’autorise pas les applications de contenu web mettre à jour de la base de données de configuration. Cette nouvelle fonctionnalité de sécurité qui contrôle le comportement est la propriété SPWebService.RemoteAdministratorAccessDenied dans l’API de SharePoint. Cependant, il peut être désactivé si nécessaire mais comme avec toute fonctionnalité de sécurité, vous devez être très prudent et effectuer des tests approfondis avant de les mettre hors tension.

Résolution


RemoteAdministratorAccessDenied est une propriété persistante, qui peut être définie avec la valeur false pour désactiver la fonctionnalité. Vous pouvez effectuer cette opération dans une application Console ou utiliser Powershell et puis exécutez un IISReset.

Code d’application console

SPWebService myService = SPWebService.ContentService ;
myService.RemoteAdministratorAccessDenied = false ;
myService.Update() ;


Code PowerShell

fonction Set-RemoteAdministratorAccessDenied-False()
{
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration") > $null

# accéder à un service de contenu web
    $contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
# désactiver la sécurité de l’administration à distance
    $contentService.RemoteAdministratorAccessDenied = $false
$contentService.Update()
}

Set-RemoteAdministratorAccessDenied-faux