ローカル管理者のWindows権限とSharePoint権限の両方を取得するためにSharePointタイマージョブが必要になるという異常な状況がありSHAREPOINT\System
ます。
ローカル管理者のメンバーであるアカウントを使用するようにタイマーサービスを構成するだけで、Windowsの特権を取得できます。これは、SharePointタイマーサービスに想定よりも多くの権限を与えるため、適切なソリューションではないことを理解しています。ただし、少なくともSharePointタイマージョブを実行できますstsadm
。
SHAREPOINT\System
ローカル管理者の下でタイマーサービスを実行する際のもう1つの問題は、このユーザーが、このSharePointジョブにも必要なSharePoint特権を必ずしも持っていないことです。この場合は機能しないことがわかりましたSPSecurity.RunWithElevatedPrivileges
。リフレクターはRunWithElevatedPrivileges
、現在のプロセスが(SharePointジョブを実行するサービスプロセス)であり、昇格を実行しないかどうかをチェックすることを示していますowstimer
(ここでの合理的な理由は、タイマーサービスがSharePointNT AUTHORITY\NetworkService
を持つWindowsアカウントで実行されることになっていることですSHAREPOINT\System
特権、したがって、タイマージョブの特権を上げる必要はありません)。
ここで考えられる唯一の解決策は、通常の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
このアカウントでインタラクティブに実行するだけで、すべて問題ありません。このアカウントで実行するようにタイマーサービスを構成すると、正常に機能します。
任意の提案をいただければ幸いです:)