我正在尝试确认我对权限的调查结果。
为了从控制台应用程序或WinForm应用程序访问SharePoint对象模型,运行应用程序的用户必须具有对相关Web应用程序的内容数据库的db_admin权限。
为了在ASP.NET应用程序中使用Microsoft.SharePoint.Administration(如调用SPFarm.Local.Solutions.Add),必须满足以下条件:
SPSecurity.RunWithElevatedPrivileges(delegate(){code to run});
访问ASP.NET页面的用户必须是Farm Adminstrators Group的一部分(该页面在_layouts下运行)
相关网络应用程序的应用程序池标识中的用户也必须位于Farm Adminstrators Group
此信息看起来是否正确?
答案 0 :(得分:2)
编辑:与Michael的评论相反,我认为此应用程序不会在SP服务器场内运行。
我根本不推荐这种方法,因为它是一种不受支持的使用SharePoint OM的方法。
最好不要编写位于SP服务器场并使用OM的Web服务,然后访问Web服务程序以执行所需的功能。
您还可以查看开箱即用的sharepoint网络服务。
RunWithElevatedPrivileges在你的场景中不起作用我不认为因为它需要一个基本的不确定性,在SP场上执行代码的情况下,SP App Pool身份通常是一个场管理员帐户。
我很高兴能够在所有这些方面得到纠正,但在我的环境中投资一个非标准且不受支持的问题方法是不明智的。
答案 1 :(得分:2)
是的但是在Web服务代码中,您使用RunWithElevated Privileges调用功能代码,这会绕过您运行Web服务的身份,而是使用SPFarmAdmin用户来执行代码。
或者在应用程序池中托管Web服务,该应用程序池使用与您的中央管理站点相同的域帐户,并允许匿名访问Web服务。这对于内部使用是安全的,并且意味着Web服务始终具有提升的权限。
答案 2 :(得分:1)
是的,Web服务需要适当的访问权限,但使用本地运行的Web服务更容易控制。
但是,如果您说应用程序始终在服务器上运行,那么使用RunWithElevatedPrivileges将解决任何权限问题,因为您实际上将该代码作为SPFarmAdmin运行(只要正确配置了应用程序池标识)。
注意:您可以将此方法用于定制Web服务或客户端应用程序(如控制台应用程序或Windows窗体)。
答案 3 :(得分:1)
如果您使用RunWithElevatedPermissions,那么Web服务运行的用户并不重要,因为您是有效的模拟服务器场管理员帐户。
您还可以在Web服务中进行自己的模拟,并模拟您想要的任何用户。
基本上,如果Web服务在给定的应用程序池中运行,那么Web服务将在应用程序池运行的缩进下运行。这会澄清事情吗?