sharepoint securityexception

sharepoint - Al ejecutar SPWebApplication.Update con la cuenta del sistema se lanza SecurityException



(2)

Estoy haciendo algunas modificaciones web.config con la clase SPWebConfigModification. Cuando los agrego a WebApplication y llamo a Update to it, me arroja SecurityException, aunque

  • Ejecuto el código con privilegios elevados (y abro una nueva instancia de SPSite)
  • mi asamblea está en GAC
  • la cuenta del grupo de aplicaciones es del grupo wss_admin_wpg y el archivo web.config tiene wss_admin_wpg write permissins.

Código

SPSecurity.RunWithElevatedPrivileges(delegate() { addProviderProxy(properties); });

donde addProviderProxy (propiedades SPItemEventProperties)

using (SPSite site = new SPSite(properties.SiteId)) using (SPWeb web = site.OpenWeb()) { ensureSectionGroup(web); ... }

donde ensureSectionGroup (SPWeb web)

SPWebApplication webApp = web.Site.WebApplication; ... webApp.Update(); <--Throws exception here

Detalles de excepción

System.Security.SecurityException was caught Message="Piekļuve liegta." //(Translates to something like "Access Denied") Source="Microsoft.SharePoint" StackTrace: at Microsoft.SharePoint.Administration.SPPersistedObject.Update() at Microsoft.SharePoint.Administration.SPWebApplication.Update() at Balticovo.SharePoint.AdjustWebConfigForOutlook.ensureSectionGroup(SPWeb web) InnerException:


Como el error "Acceso denegado" está ocurriendo en SPPersistedObject.Update (), esto obviamente indica que hay un problema persistiendo el objeto. Es muy probable que se trate de un error de permisos al escribir en la base de datos de configuración de SharePoint (o tal vez en otra base de datos de SP).

Si es posible, compruebe los registros de SQL o ejecute un seguimiento del Analizador de SQL para obtener más información sobre qué cuenta está causando el problema. Verifique que la cuenta en la que se está ejecutando su código tenga acceso a la base de datos de configuración.

Actualizar:

Puede otorgar permiso a la base de datos de configuración agregando el usuario al grupo del Administrador de la granja de servidores. Esto les otorga el permiso db_owner en esa base de datos que no es ideal ya que eso significa que la cuenta puede hacer cualquier cosa. Sin embargo, no hay otra forma (que yo sepa) que pueda dar acceso a esta base de datos.

Si esto es una preocupación importante, puede cambiar los permisos usted mismo a través de SQL Server Management Studio. Lo ideal sería utilizar SQL Profiler y diseñar una nueva función que proporcione solo los permisos necesarios. Alternativamente intente agregar la cuenta a la función WSS_Content_Application_Pools y / o las data_reader y data_writer .


Intente ejecutar esto en un script de PowerShell, luego vuelva a intentar su actualización:

$contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService $contentService.RemoteAdministratorAccessDenied = $false $contentService.Update()

Todavía estoy recibiendo el truco de los permisos de 2010, así que tómalo por lo que vale. Según Paul Kotlyar , eso ayudará.