Доступ к Elmah.axd с помощью SqlErrorLog в SharePoint без добавления пользователя в базу данных

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

  •  20-09-2019
  •  | 
  •  

Вопрос

Я установил / настроил Эльма в моей личной среде разработки SharePoint все работает отлично, так как я вошел в систему как администратор и т.д.Я использую журнал ошибок MS Sql Server.(Я также использую log4net для обработки ведения журнала на уровне DEBUG / INFO / etc инструкции log также хранятся в базе данных, в той же таблице, что и у ELMAH.)

Однако на самом сервере разработки (не в моей личной среде), когда я получаю доступ http://example/elmah.axd Я получаю сообщение об ошибке "Не удалось войти в систему для пользователя 'NT AUTHORITY\ АНОНИМНЫЙ ВХОД в СИСТЕМУ'".Я понимаю, что это традиционная ошибка для "проблемы с двойным переходом", но я даже не хочу, чтобы передавались мои учетные данные - я бы просто хотел, чтобы доступ к базе данных осуществлялся с учетными данными идентификатора пула приложений.При использовании объектной модели SP доступна функция SPSecurity.RunWithElevatedPrivileges;однако я не хочу изменять исходный код Elmah.

Моя производственная среда исключает использование аутентификации SQL Server, изменение олицетворения на false или предоставление мне прав доступа к базе данных напрямую.

Как я могу заставить это сработать?Я что-то упускаю?

Это было полезно?

Решение

Моя производственная среда исключает использование аутентификации SQL Server, изменение олицетворения на false или предоставление мне прав доступа к базе данных напрямую.

Тогда у вас нет другого выбора, кроме как изменить источник 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 должна быть настроена.Я сам это проверил, и это работает.Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top