Question

J'ai installé / configuré Elmah sur mon environnement SharePoint dev personnel et tout fonctionne très bien depuis Je suis connecté en tant qu'administrateur, etc. J'utilise l'erreur MS Sql Server Log. (J'utilise aussi log4net pour gérer l'enregistrement DEBUG / INFO / etc niveau et de consigner les instructions sont également stockées dans le db, dans le même tableau que celui ELMAH.)

Cependant, sur le serveur de dev réelle (pas mon environnement personnel), quand j'accéder à http: // exemple / ELMAH. axd Je reçois l'erreur « Échec de la connexion pour l'utilisateur « NT AUTHORITY \ ANONYMOUS LOGON » ». Je comprends que cela est l'erreur traditionnelle pour le « problème de la double-hop » mais je ne veux même pas mes lettres de créance à passer le long - je comme l'accès base de données à réaliser avec les informations d'identification de la demande d'identité du pool. Lorsque vous utilisez le modèle d'objet SP le SPSecurity.RunWithElevatedPrivileges est disponible; cependant, je ne veux pas modifier la source Elmah.

Mon environnement de production empêche l'utilisation de l'authentification SQL Server, en changeant l'usurpation d'identité à faux, ou me donner des autorisations sur le db directement.

Comment puis-je obtenir ce travail? Est-ce que je manque quelque chose?

Était-ce utile?

La solution

  

Mon environnement de production exclut   l'utilisation de l'authentification SQL Server,   changer l'usurpation d'identité à faux, ou   me donner des autorisations sur le db   directement.

Ensuite, vous avez pas d'autre choix que de modifier la source Elmah. Désolé.

Cela a moins à voir avec le problème de double hop et plus à voir avec le mécanisme mal documenté d'usurpation d'identité dans ASP.NET. Selon cet article , apparemment provoque <identity impersonate="true" /> ASP.NET pour usurper l'identité par défaut IIS compte anonyme (IUSR_ nommachine ). a besoin de SharePoint cela, mais il ne vous pas essayer d'accéder à une base de données distante, donc il y a évidemment quelque chose que vous devez faire.

Yep, selon cet article vous devez modifier le code source Elmah et de créer une nouvelle classe dérivant de la ErrorLog de classe abstraite. Cette nouvelle classe agit alors comme une enveloppe autour de la classe SqlErrorLog originale et exécute ses méthodes dans un bloc de RWEP. Ici, il est:

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

Il va sans dire que vous devez maintenant faire référence à SharePoint dans le projet Elmah et votre Elmah.dll devrez être GACed. Je l'ai testé moi-même et il fonctionne. Bonne chance.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top