الوصول إلى elmah.axd مع sqlerrorlog في SharePoint دون إضافة المستخدم إلى db

StackOverflow https://stackoverflow.com/questions/2073630

  •  20-09-2019
  •  | 
  •  

سؤال

لقد قمت بتثبيت/تكوين المسح في بيئة SharePoint Dev الشخصية ، يعمل كل شيء بشكل رائع لأنني قمت بتسجيل الدخول كمسؤول ، وما إلى ذلك. أستخدم سجل أخطاء خادم MS SQL. (أنا أيضًا أستخدم log4net للتعامل مع بيانات تسجيل التصحيح/المعلومات/إلخ وتسجيل مستوى السجل أيضًا في DB ، في نفس جدول Elmah's.)

ومع ذلك ، على خادم DEV الفعلي (وليس بيئتي الشخصية) ، عندما أقوم بالوصول http: //example/elmah.axd أحصل على الخطأ "فشل تسجيل الدخول في" Authority Authority Anonymous Logon "". أنا أفهم أن هذا هو الخطأ التقليدي لـ "مشكلة القفزة المزدوجة" ، لكنني لا أريد حتى أن يتم تمرير بيانات الاعتماد الخاصة بي - أود أن يتم الوصول إلى قاعدة البيانات مع بيانات اعتماد هوية تجمع التطبيقات. عند استخدام نموذج كائن SP ، يتوفر spsecurity.runwitheLevatedPrivileges ؛ ومع ذلك ، لا أريد تعديل مصدر Elmah.

تمنع بيئة الإنتاج الخاصة بي استخدام مصادقة SQL Server ، أو تغيير الانتحار إلى False ، أو إعطاء أذونات على DB مباشرة.

كيف يمكنني الحصول على هذا للعمل؟ هل فاتني شيء؟

هل كانت مفيدة؟

المحلول

تمنع بيئة الإنتاج الخاصة بي استخدام مصادقة SQL Server ، أو تغيير الانتحار إلى False ، أو إعطاء أذونات على DB مباشرة.

ثم ليس لديك خيار سوى تعديل مصدر Elmah. آسف.

هذا له علاقة أقل بمشكلة قفزة مزدوجة وأكثر علاقة بالآلية الموثقة بشكل سيء للانتحال في ASP.NET. بالنسبة الى هذه المقالة, ، فيما يبدو <identity impersonate="true" /> يسبب ASP.NET انتحال شخصية حساب IIS المجهول (IUSR_إسم الألة). يحتاج SharePoint إلى ذلك ، لكنك لا تحاول جيدًا الوصول إلى قاعدة بيانات عن بُعد ، لذلك من الواضح أن هناك شيئًا تحتاج إلى القيام به.

نعم ، وفقا ل هذه المقالة يجب عليك تعديل رمز المصدر Elmah وإنشاء فئة جديدة مستمدة من الفئة التجريدية ErrorLog. تعمل هذه الفئة الجديدة بعد ذلك كركبة حول فئة SQLerrorLog الأصلية وتدير أساليبها في كتلة RWEP. ها هو:

public class SqlErrorLogWEP : ErrorLog
{
    private SqlErrorLog sqlErrorLog;

    public SqlErrorLogWEP(IDictionary config)
    {
        sqlErrorLog = new SqlErrorLog(config);
    }

    public SqlErrorLogWEP(string connectionString)
    {
        sqlErrorLog = new SqlErrorLog(connectionString);
    }

    public override string Log(Error error)
    {
        string retVal = String.Empty;
        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            retVal = sqlErrorLog.Log(error);
        });

        return retVal;
    }

    public override ErrorLogEntry GetError(string id)
    {
        ErrorLogEntry retVal = default(ErrorLogEntry);

        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            retVal = sqlErrorLog.GetError(id);
        });

        return retVal;
    }

    public override int GetErrors(int pageIndex, int pageSize, System.Collections.IList errorEntryList)
    {
        int retVal = -1;

        SPSecurity.RunWithElevatedPrivileges(delegate()
        {
            retVal = sqlErrorLog.GetErrors(pageIndex, pageSize, errorEntryList);
        });

        return retVal;
    }
}

وغني عن القول أنك ستحتاج الآن إلى الرجوع إلى SharePoint في مشروع Elmah وسيحتاج elmah.dll إلى الحصول على ged. لقد اختبرت هذا بنفسي وهو يعمل. حظا طيبا وفقك الله.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top