2

我正在尝试确认我对权限的发现。

为了从控制台应用程序或 WinForm 应用程序访问 SharePoint 对象模型,运行该应用程序的用户必须对相关 Web 应用程序的内容数据库具有 db_admin 权限。

为了在 ASP.NET 应用程序中使用 Microsoft.SharePoint.Administration(如调用 SPFarm.Local.Solutions.Add),必须满足以下条件:

  • 调用必须使用 RunWithElevatedPrivileges 包装,如下所示:

SPSecurity.RunWithElevatedPrivileges(delegate() { 运行代码 } );

  • 访问 ASP.NET 页面的用户必须是 Farm Adminstrators Group 的一部分(该页面在 _layouts 下运行)

  • 相关 Web 应用程序的应用程序池身份中的用户也必须在农场管理员组中

这些信息看起来正确吗?

4

4 回答 4

2

编辑:与迈克尔的评论相反,我假设这个应用程序不会在 SP 场内运行。

我根本不推荐这种方法,因为它是一种不受支持的使用 SharePoint OM 的方法。

您最好编写一个位于 SP 场并使用 OM 的 Web 服务,然后访问 Web 服务方法以执行您所需的功能。

您还可以查看开箱即用的共享点 Web 服务。

RunWithElevatedPrivileges 在您的场景中不起作用我不认为因为它需要一个基本的 indetity 来回退,在 SP 场上执行的代码的情况下是 SP 应用程序池标识,通常是一个场管理员帐户。

我很高兴在所有这些问题上得到纠正,但在我的环境中,投资于非标准和不受支持的问题解决方法当然是不明智的。

于 2009-01-30T13:29:42.273 回答
2

是的,但是在 Web 服务代码中,您使用 RunWithElevated Privileges 调用功能代码,这会绕过您运行 Web 服务的身份,而是使用 SPFarmAdmin 用户来执行代码。

或者,将 Web 服务托管在使用与中央管理站点相同的域帐户的应用程序池中,并允许匿名访问 Web 服务。这仅对内部使用是安全的,并且意味着 Web 服务始终具有提升的权限。

于 2009-01-30T16:40:34.727 回答
1

是的,Web 服务需要适当的访问权限,但是使用本地运行的 Web 服务更容易控制。

但是,如果您说应用程序始终在服务器上运行,那么使用 RunWithElevatedPrivileges 将解决任何权限问题,因为您实际上是以 SPFarmAdmin 运行该代码(只要正确配置了应用程序池标识)。

注意:您可以将此方法与定制的 Web 服务或客户端应用程序(例如控制台应用程序或 Windows 窗体)一起使用。

于 2009-01-30T13:48:48.270 回答
1

抱歉,业余爱好者,我从未见过你回复。

如果您使用 RunWithElevatedPermissions,那么 Web 服务以哪个用户身份运行并不重要,因为您实际上是在模拟场管理员帐户。

您还可以在 Web 服务中进行自己的模拟,并模拟您希望的任何用户。

Essentially if the web service is running within a given application pool then the web service will run under the indentity which the app pool runs as. Does this clarify things?

于 2009-02-11T15:05:56.863 回答