Frage

Ich habe / installiert konfiguriert Elmah auf meiner persönlichen Sharepoint-Entwickler-Umgebung und alles funktioniert gut da ich bin als Admin angemeldet, usw. ich das MS SQL Server-Fehlerprotokoll verwenden. (Ich verwende auch log4net Griff DEBUG / INFO / etc Ebene Protokollierung und Protokollanweisungen werden ebenfalls gespeichert in die db, in der gleichen Tabelle wie ELMAH des.)

Allerdings auf dem tatsächlichen dev-Server (nicht meine persönliche Umgebung), wenn ich Zugriff http: // example / Elmah. axd erhalte ich die Fehlermeldung „Fehler bei der Anmeldung für den Benutzer‚NT AUTHORITY \ ANONYMOUS LOGON‘“. Ich verstehe, dass dies die traditionellen Fehler für das „Double-Hop-Problem“ ist, aber ich weiß nicht einmal, dass mein Beglaubigungs entlang weitergegeben werden - ich würde genauso wie der Zugriff auf der Datenbank gemacht werde mit den Anmeldeinformationen der Identität des Anwendungspools. Wenn das SP-Objektmodell ist der SPSecurity.RunWithElevatedPrivileges verfügbar; aber ich will nicht die Elmah Quelle ändern.

Meine Produktionsumgebung schließt die Verwendung von SQL Server-Authentifizierung, Identitätswechsel auf false ändern oder selbst Berechtigungen auf dem db direkt zu geben.

Wie kann ich dies funktioniert? Bin ich etwas fehlt?

War es hilfreich?

Lösung

  

Meine Produktionsumgebung verbietet   die Verwendung von SQL Server-Authentifizierung,   Ändern Identitätswechsel auf falsch, oder   geben mir Berechtigungen für den db   direkt an.

Dann haben Sie keine andere Wahl, als die Elmah Quelle zu ändern. Es tut uns Leid.

Das hat weniger mit dem Doppel-Hop-Problem zu tun und mehr mit dem schlecht dokumentierten Mechanismus des Identitätswechsels in ASP.NET zu tun. Nach diesem Artikel , verursacht anscheinend <identity impersonate="true" /> ASP.NET die zum Imitieren Standard IIS anonymes Konto (IUSR_ Computername ). Sharepoint muss dies aber es tut dir nicht gut versuchen, eine Remote-Datenbank zugreifen zu können, so dass es offensichtlich ist etwas, was Sie tun müssen.

Ja, nach dieser Artikel die Elmah Quellcode bearbeiten müssen und eine neue Klasse erstellen, die von der abstrakten Klasse ErrorLog abzuleiten. Diese neue Klasse wirkt dann als Wrapper um die ursprüngliche SqlErrorLog Klasse und führt seine Methoden in einem RWEP Block. Hier ist sie:

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;
    }
}

Es ist selbstverständlich, dass Sie jetzt zu Referenzsharepoint in dem Projekt Elmah benötigen und Ihre Elmah.dll müssen GACed sein. Ich habe das selbst getestet und es funktioniert. Viel Glück.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top