3

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

  • 我以提升的权限运行代码(并打开 SPSite 的新实例)
  • 我的程序集在 GAC
  • 应用程序池帐户来自 wss_admin_wpg组,并且 web.config 文件具有wss_admin_wpg写入权限。

代码

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: 
4

2 回答 2

4

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

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

我仍然掌握 2010 年权限的窍门,所以要物有所值。根据Paul Kotlyar的说法,这会有所帮助。

于 2010-10-29T01:29:35.000 回答
1

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

如果可能,请检查 SQL 日志或运行 SQL Profiler 跟踪以获取有关导致问题的帐户的更多信息。检查运行代码的帐户是否有权访问配置数据库。

更新:

您可以通过将用户添加到农场管理员组来授予配置数据库的权限。这给了他们对该数据库的 db_owner 权限,这并不理想,因为这意味着该帐户可以做任何事情。但是,没有其他方法(据我所知)可以访问该数据库。

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

于 2009-09-07T11:49:50.927 回答