2

这个问题的背景是我目前的任务是开发一个应用程序页面,使用户能够创建网站集。从列表项中读取网站集的属性。我的解决方案在大多数情况下都有效。但是,有一种应用程序池身份配置会引发访问被拒绝,我想了解为什么会发生这种情况。

我的代码的(非常)精简版本如下所示:

SPSecurity.RunWithElevatedPrivileges(delegate { try 
{
  SPWebApplication webApp = this.Web.Site.WebApplication;
  SPSiteCollection siteColl = webApp.Sites;

  SPSite newSite = siteColl.Add(mngPath + siteUrl, siteName, siteDesc, LocaleId, 
                                null, primarySiteAdmin, String.Empty, 
                                String.Empty));
});

当 Identities 设置如下时抛出 UnauthorizedAccessException:


SharePoint 管理中心 v4 --> localdomain\adminaccount

SharePoint - 80 --> 网络服务


NetworkService 和 domain\adminaccount 的所有其他组合都可以工作。有人对此有解释吗?

更新

我想您必须使用与中央管理应用程序池相同的用户来运行您的共享点应用程序池,以便在数据库上拥有足够的权限。但这仍然不能解释为什么它在以下配置下工作:


SharePoint 管理中心 v4 --> NetworkService

SharePoint - 80 --> localdomain\adminaccount


顺便说一句,关于 SA 的另一个问题提供了解决方案(以及问题的更多细节)。请参阅通过工作流预配新网站集的权限

4

3 回答 3

2

RunWithElevatedPrivileges 下的代码是通过使用您的代码在其下执行的 Web 应用程序的 apppool 帐户的凭据来执行的。最佳实践是始终将服务域帐户用于应用程序池。在您的情况下,其中一个帐户必须缺少进入服务器上共享点创建的某些组的条目,或者可能对数据库没有适当的权限

于 2010-12-15T19:11:13.203 回答
1

好的,问题是运行我的应用程序页面的主机 Web 应用程序应用程序池的用户的数据库访问权限。Farm 帐户(显然)对 AdminContent 和 _Config 数据库具有 db_owner 权限。这就是为什么当两个应用程序池都使用同一个用户运行时它起作用的原因。

它也使用以下配置工作的原因......


SharePoint 管理中心 v4 --> NetworkService

SharePoint - 80 --> localdomain\adminaccount


...是我的本地管理员帐户也有 db_owner 权限。我不知道它为什么拥有这些权利,我从来没有自己摆弄过数据库访问权限。我只将它设置为农场帐户一次,但我很快就改变了。

于 2010-12-16T12:37:28.893 回答
0

我将研究以下 1)提升用户对目标 contedb 的权限 2)如果脚本创建数据库,则授予提升用户(应用程序页面的主机 Web 应用程序应用程序池帐户)作为 dbcreator 的权限。

于 2010-12-16T02:47:25.200 回答