我正在使用SPWebConfigModification类进行一些web.config修改。将它们添加到WebApplication并向其调用Update时,它会抛出SecurityException,尽管
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:
答案 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_reader
和data_writer
角色。