शेयरपॉइंट: एक टाइमर जॉब + SHAREPOINT \ सिस्टम अधिकारों से stsadm निष्पादित करना

मेरे पास एक असामान्य स्थिति है जिसमें मुझे स्थानीय व्यवस्थापक विंडोज विशेषाधिकारों के लिए एक शेयरपॉइंट टाइमर नौकरी की आवश्यकता है और SHAREPOINT \ System SharePoint विशेषाधिकार हैं।

मैं स्थानीय प्रशासकों के सदस्य होने वाले खाते का उपयोग करने के लिए टाइमर सेवा को कॉन्फ़िगर करके विंडोज विशेषाधिकार प्राप्त कर सकता हूं। मैं समझता हूं कि यह एक अच्छा समाधान नहीं है क्योंकि यह SharePoint टाइमर सेवा को अधिक अधिकार देता है, तो ऐसा माना जाता है। लेकिन यह कम से कम मेरे SharePoint टाइमर नौकरी को stsadm चलाने की अनुमति देता है।

स्थानीय व्यवस्थापक के तहत टाइमर सेवा चलाने के साथ एक और समस्या यह है कि इस उपयोगकर्ता के पास SHAREPOINT \ System SharePoint विशेषाधिकार नहीं होंगे जो मुझे इस SharePoint नौकरी के लिए भी आवश्यक है। यह पता चला है कि SPSecurity.RunWithElevatedPrivileges इस मामले में काम नहीं करेगा। परावर्तक दिखाता है कि RunWithElevatedPrivileges जांचता है कि वर्तमान प्रक्रिया owstimer (सेवा प्रक्रिया जो SharePoint नौकरियां चलाती है) और कोई ऊंचाई नहीं करती है यह मामला है (यहां तर्कसंगत, मुझे लगता है, यह है कि टाइमर सेवा NT प्राधिकरण \ नेटवर्क सेवा विंडोज खाते के अंतर्गत चलनी चाहिए, जिसमें SHAREPOINT \ System SharePoint विशेषाधिकार हैं, और इस प्रकार टाइमर के लिए विशेषाधिकारों को ऊपर उठाने की आवश्यकता नहीं है काम)।

यहां एकमात्र संभावित समाधान टाइमर सेवा को अपने सामान्य नेटवर्क सेवा विंडोज खाते के तहत चलाने और एसटीएसएडीएम को स्थानीय प्रशासक के रूप में चलाने के लिए कहीं भी प्रशासक क्रेडेंशियल्स को संग्रहीत करके सिस्टम में भेजकर चलाया जाता है। डायग्नोस्टिक्स.प्रोसेस.रुन() स्टारइन्फो का उपयोगकर्ता नाम , डोमेन और पासवर्ड।

ऐसा लगता है कि अब सबकुछ काम करना चाहिए, लेकिन यहां एक और समस्या है जिसे मैं इस समय अटक गया हूं। Stsamd निम्न त्रुटि पॉपअप (!) के साथ विफल रहा है (Winternals filemon दिखाता है कि stsadm इस मामले में व्यवस्थापक के अंतर्गत चल रहा है):

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

इवेंट व्यूअर पॉपअप को छोड़कर कुछ भी पंजीकृत नहीं करता है।

स्थानीय व्यवस्थापक उपयोगकर्ता मेरा खाता है और जब मैं इस खाते के तहत इंटरैक्टिव रूप से stsadm चलाता हूं तो सब कुछ ठीक है। यह ठीक काम करता है जब मैं इस खाते के तहत चलाने के लिए टाइमर सेवा को कॉन्फ़िगर करता हूं।

किसी भी सुझाव की सराहना की जाती है :)

0
जोड़ा संपादित
विचारों: 3

3 उत्तर

मैं काम पर नहीं हूं इसलिए यह मेरे सिर के ऊपर से है, लेकिन: यदि आपको साइट का संदर्भ मिलता है, तो क्या आप सिस्टम-उपयोगकर्ता टोकन के साथ एक नया एसपीएससाइट बनाने की कोशिश कर सकते हैं?

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

using (SPSite syssite = new SPSite(thisSite.Url,sut)
{
    // Do what you have to do
}
0
जोड़ा

अन्य अनुप्रयोग अगर इस तरह से चलते हैं (यानी स्पष्ट क्रेडेंशियल्स वाले टाइमर जॉब से) उसी तरह विफल हो रहे हैं "एप्लिकेशन को धीरे-धीरे प्रारंभ करने में विफल रहा"। मैं सिर्फ एक साधारण ऐप को घुमाता हूं जो किसी अन्य निष्पादन योग्य और इसके तर्कों को पैरामीर्स के रूप में लेता है और जब उस टाइमर नौकरी से चलता है तो यह उसी तरह विफल रहता है।

internal class ExternalProcess
{
    public static void run(String executablePath, String workingDirectory, String programArguments, String domain, String userName,
                           String password, out Int32 exitCode, out String output)
    {
        Process process = new Process();

        process.StartInfo.UseShellExecute = false;
        process.StartInfo.RedirectStandardError = true;
        process.StartInfo.RedirectStandardOutput = true;

        StringBuilder outputString = new StringBuilder();
        Object synchObj = new object();

        DataReceivedEventHandler outputAppender =
            delegate(Object sender, DataReceivedEventArgs args)
                {
                    lock (synchObj)
                    {
                        outputString.AppendLine(args.Data);
                    }
                };

        process.OutputDataReceived += outputAppender;
        process.ErrorDataReceived += outputAppender;

        process.StartInfo.FileName = @"C:\AppRunner.exe";
        process.StartInfo.WorkingDirectory = workingDirectory;
        process.StartInfo.Arguments = @"""" + executablePath + @""" " + programArguments;

        process.StartInfo.UserName = userName;
        process.StartInfo.Domain = domain; 
        SecureString passwordString = new SecureString();

        foreach (Char c in password)
        {
            passwordString.AppendChar(c);
        }

        process.StartInfo.Password = passwordString;

        process.Start();

        process.BeginOutputReadLine();
        process.BeginErrorReadLine();

        process.WaitForExit();

        exitCode = process.ExitCode;
        output = outputString.ToString();
    }
}

AppRunner मूल रूप से उपरोक्त खंड के समान ही करता है, लेकिन उपयोगकर्ता नाम और पासवर्ड के बिना

0
जोड़ा

शेयरपॉइंट टाइमर जॉब्स शेयरपॉइंट फर्म एडमिन क्रेडेंशियल्स के साथ चलता है, क्योंकि जानकारी SharePoint Config डेटाबेस में होती है। इस प्रकार आवेदन पूल में पहुंच नहीं होगी।

देव पर्यावरण में टाइमर नौकरी का परीक्षण करने के लिए, हम अस्थायी रूप से आवेदन पूल खाते को केंद्रीय प्रशासन के लिए उपयोग किए जा रहे एप्लिकेशन पूल खाते में बदल सकते हैं।

0
जोड़ा