【发布时间】:2010-09-05 10:44:37
【问题描述】:
我有一个不寻常的情况,我需要一个 SharePoint 计时器作业,以同时拥有本地管理员窗口权限和 SHAREPOINT\System SharePoint 权限。
我可以通过简单地将计时器服务配置为使用本地管理员成员的帐户来获得 Windows 权限。我知道这不是一个好的解决方案,因为它为 SharePoint 计时器服务提供了比它应该拥有的更多权利。但它至少允许我的 SharePoint 计时器作业运行stsadm。
在本地管理员下运行计时器服务的另一个问题是,此用户不一定具有 SHAREPOINT\System SharePoint 权限,我也需要此权限来执行此 SharePoint 作业。事实证明,SPSecurity.RunWithElevatedPrivileges 在这种情况下不起作用。 Reflector 显示 RunWithElevatedPrivileges 检查当前进程是否为 owstimer(运行 SharePoint 作业的服务进程)并且不执行任何提升(我猜这里的原因是计时器服务应该在NT AUTHORITY\NetworkService windows 帐户,具有SHAREPOINT\System SharePoint 权限,因此无需提升计时器作业的权限)。
这里唯一可能的解决方案似乎是在其通常的 NetworkService windows 帐户下运行计时器服务,并通过将管理员凭据存储在某处并将它们传递给 System.Diagnostics.Process.Run() 槽以本地管理员身份运行 stsadm StarInfo 的用户名、域和密码。
现在看来一切都应该正常了,但这是我目前遇到的另一个问题。 Stsamd 失败并出现以下错误弹出窗口 (!)(Winternals filemon 显示在这种情况下 stsadm 正在管理员下运行):
The application failed to initialize properly (0x0c0000142). Click OK to terminate the application.
事件查看器只注册弹出窗口。
本地管理员用户是我的帐户,当我在此帐户下以交互方式运行 stsadm 时,一切正常。当我将计时器服务配置为在此帐户下运行时,它也可以正常工作。
任何建议表示赞赏:)
【问题讨论】:
标签: sharepoint timer privileges stsadm event-viewer