【问题标题】:Programmatically create content database in C# (SP 2013)以编程方式在 C# 中创建内容数据库 (SP 2013)
【发布时间】:2015-02-19 08:37:47
【问题描述】:

目标是提供一个 Web 用户界面,可以选择使用新内容数据库创建新网站集。

使用管理员用户,我可以在 CA 中手动创建新的内容数据库。我还可以在这个内容数据库中创建一个新的网站集。

这个想法是创建一个事件接收器 (C#)。如果用户将数据添加到表中,将执行上述操作。

实验: a) 控制台应用程序 - 有效!

using (SPSite site = new SPSite("http://sp2013")) {
  using (SPWeb spWeb = site.OpenWeb()) {
      SPWebApplication elevatedWebApp = spWeb.Site.WebApplication;
        elevatedWebApp.ContentDatabases.Add("sp2013", "WSS_Content_80_" + DateTime.Now.ToString("yyyymmddhhMMss"), null, null, 10, 15, 0);
    }
}

b) 事件接收器 - 仅创建网站集有效,创建内容数据库无效!错误:拒绝访问。

c) 网络服务 - 不工作!错误:拒绝访问。

那么,当我可以创建网站集,但只能创建内容数据库时,为什么会收到拒绝访问错误?

最后我执行了 PS 脚本 - 但这也不起作用。

# AUTHOR: Paul Kotlyar
# CONTACT: unclepaul84@gmail.com
# DESCRIPTION: sets an option on content web service that allows updating of SP Administration objects such as SPJobDefinition from content web applications
function Set-RemoteAdministratorAccessDenied-False()
{
    # load sharepoint api libs
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") > $null
    [System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Administration") > $null

  # get content web service
 $contentService = [Microsoft.SharePoint.Administration.SPWebService]::ContentService
  # turn off remote administration security
 $contentService.RemoteAdministratorAccessDenied = $false
  # update the web service
 $contentService.Update()
}

也许有人知道解决方案?

我在Stackexchange 中问过同样的问题。

【问题讨论】:

  • 对于任何拒绝访问错误:什么用户/身份正在对什么东西执行什么操作?然后查看与该用户/身份的操作相关的权限。请记住,服务器端与客户端不同。
  • 用户是农场管理员,也在具有完全控制权限的 Web 应用程序用户策略中。尝试使用 RunWithElevatedPrivelages 运行代码,但没有成功。
  • “用户”:哪一个?客户端还是服务器?执行这些操作的是服务器,需要访问的是该用户。
  • 客户端用户是场管理员。
  • 客户端用户无关(可能),服务器正在执行操作;因此服务器需要访问权限。

标签: c# sharepoint permissions sharepoint-2013 sitecollection


【解决方案1】:

这是一个权限问题,但不是客户帐户的问题。客户端用户无关紧要。问题是,对于创建内容数据库,您的代码需要场管理员权限。但是,以提升的权限运行代码是不够的,因为当您以这种方式执行代码时,SharePoint 会模拟对应 Web 应用程序的应用程序池用户。

如果“http://sp2013”的应用程序池用户没有场管理员权限,则无法使用事件接收器创建内容数据库(可能由于这个原因,您的事件接收器和 Web 服务代码出现访问被拒绝错误) .问题是向应用程序池或服务用户授予农场管理员权限,这是一个非常糟糕的主意。

我建议您将此解决方案实施为计时器作业。您可以创建 SharePoint 场解决方案并创建计时器作业,因为通常计时器作业是使用场管理员帐户执行的。这样,您就可以创建一个内容数据库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-23
    • 2011-06-14
    • 1970-01-01
    • 2017-04-07
    • 2019-08-10
    • 2021-02-04
    相关资源
    最近更新 更多