使用System帐户执行SPWebApplication.Update会抛出SecurityException

时间:2009-09-07 09:12:14

标签: sharepoint securityexception

我正在使用SPWebConfigModification类进行一些web.config修改。将它们添加到WebApplication并向其调用Update时,它会抛出SecurityException,尽管

  • 我使用提升的特权运行代码 (并打开SPSite的新实例)
  • 我的集会在GAC
  • 应用程序池帐户来自 wss_admin_wpg 组和web.config文件有 wss_admin_wpg 写 permissins。

代码

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

其中addProviderProxy(SPItemEventProperties属性)

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

其中ensureSectionGroup(SPWeb web)

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

异常详情

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: 

2 个答案:

答案 0 :(得分:4)

尝试在PowerShell脚本中运行此功能,然后重试更新:

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

我仍然掌握着2010年的权限,所以请把它当作它的价值。根据{{​​3}},这会有所帮助。

答案 1 :(得分:1)

由于SPPersistedObject.Update()中出现“拒绝访问”错误,这显然表明持久存在该对象存在问题。这很可能是写入SharePoint配置数据库(或者可能是另一个SP数据库)的权限错误。

如果可能,请检查SQL日志或运行SQL事件探查器跟踪以获取有关导致问题的帐户的详细信息。检查您的代码运行的帐户是否可以访问配置数据库。

<强>更新

您可以通过将用户添加到Farm Administrator的组来授予配置数据库权限。这为他们提供了对该数据库的db_owner权限,这是不理想的,因为这意味着该帐户可以执行任何操作。但是,没有其他方式(我知道)可以访问此数据库。

如果这是一个主要问题,您可以通过SQL Server Management Studio自行更改权限。理想情况下,使用SQL事件探查器并设计一个新角色,仅提供所需的权限。或者,尝试将该帐户添加到WSS_Content_Application_Pools角色和/或data_readerdata_writer角色。