Sharepoint:从计时器作业+ SHAREPOINT\System权限执行stsadm

8 sharepoint privileges stsadm timer event-viewer

我有一个不寻常的情况,我需要一个SharePoint计时器作业,既有本地管理员窗口权限,也有SHAREPOINT\SystemSharePoint权限.

我只需将计时器服务配置为使用本地管理员成员的帐户即可获得Windows权限.我知道这不是一个好的解决方案,因为它为SharePoint计时器服务提供了它应该具有的更多权限.但它至少允许我的SharePoint计时器作业运行stsadm.

在本地管理员下运行计时器服务的另一个问题是,此用户不一定具有SHAREPOINT\SystemSharePoint权限,我也需要此SharePoint作业.事实证明,SPSecurity.RunWithElevatedPrivileges在这种情况下不会起作用.反射器显示RunWithElevatedPrivileges检查当前进程是否owstimer(运行SharePoint作业的服务进程)并且不执行任何提升就是这种情况(我想,这里的理性是计时器服务应该在NT AUTHORITY\NetworkService具有SHAREPOINT\SystemSharePoint的Windows帐户下运行)特权,因此无需提升计时器作业的权限.

这里唯一可行的解​​决方案似乎是在其通常的NetworkService Windows帐户下运行计时器服务,并通过在某处存储管理员凭据并通过StarInfo的用户名将它们传递给System.Diagnostics.Process.Run()来作为本地管理员运行stsadm ,域名和密码.

现在似乎一切都应该工作,但这是我现在坚持的另一个问题.Stsamd失败并出现以下错误弹出窗口(!)(Winternals filemon显示在这种情况下stsadm在管理员下运行):

The application failed to initialize properly (0x0c0000142).
Click OK to terminate the application.

除弹出窗口外,事件查看器不会注册.

本地管理员用户是我的帐户,当我stsadm在这个帐户下以交互方式运行时,一切正常.当我将计时器服务配置为在此帐户下运行时,它也可以正常工作.

任何建议值得赞赏:)

Mic*_*tum 1

我不在工作,所以这不是我的想法,但是:如果您获得对该站点的引用,您可以尝试使用 SYSTEM-UserToken 创建一个新的 SPSite 吗?

SPUserToken sut = thisSite.RootWeb.AllUsers["SHAREPOINT\SYSTEM"].UserToken;

using (SPSite syssite = new SPSite(thisSite.Url,sut)
{
    // Do what you have to do
}
Run Code Online (Sandbox Code Playgroud)