Создание триггера на aspnet_membership приводит к сбою входа - PullRequest
0 голосов
/ 28 сентября 2011

Я занимаюсь обслуживанием старого веб-приложения, в котором у нас есть 2 БД.Один для внешнего интерфейса WWW (DotNetNuke), а другой для административного.Оба приложения используют aspnet_membership для пользователей, и мы хотим синхронизировать входы между приложениями.Я думал, что мы сделаем это с помощью триггера, но логин начинает давать сбой, когда я добавляю триггер.

USE dnnTicket
GO 

CREATE TRIGGER update_membership ON dbo.aspnet_Membership 
    AFTER UPDATE
AS
SET NOCOUNT ON   
    IF (trigger_nestlevel() > 1) RETURN --Make sure a similar trigger on the other db don't cause infinite loops. 
    UPDATE ticket4you.dbo.aspnet_Membership SET 
              [Password] = INSERTED.[Password],
              PasswordFormat = INSERTED.PasswordFormat,
              PasswordSalt = INSERTED.PasswordSalt,
              MobilePIN = INSERTED.MobilePIN,
              Email = INSERTED.Email,
              LoweredEmail = INSERTED.LoweredEmail,
              PasswordQuestion = INSERTED.PasswordQuestion,
              PasswordAnswer = INSERTED.PasswordAnswer ,
              IsApproved = INSERTED.IsApproved ,
              IsLockedOut = INSERTED.IsLockedOut ,
              CreateDate = INSERTED.CreateDate ,
              LastLoginDate = INSERTED.LastLoginDate ,
              LastPasswordChangedDate = INSERTED.LastPasswordChangedDate,
              LastLockoutDate = INSERTED.LastLockoutDate ,
              FailedPasswordAttemptCount = INSERTED.FailedPasswordAttemptCount ,
              FailedPasswordAttemptWindowStart = INSERTED.FailedPasswordAttemptWindowStart ,
              FailedPasswordAnswerAttemptCount = INSERTED.FailedPasswordAnswerAttemptCount ,
              FailedPasswordAnswerAttemptWindowStart = INSERTED.FailedPasswordAnswerAttemptWindowStart 
    FROM  INSERTED 
    WHERE ticket4you.[dbo].aspnet_Membership.UserId = INSERTED.userID 
SET NOCOUNT OFF 
GO       

С этим триггером в логинах БД с использованием dnnTicket db происходит сбой.

Я отслеживал активность сервера SQL как мог и обнаружил очень странную разницу в трассировке от того момента, когда запрос выполняется на веб-сервере, до того, когда я вручную запускаю тот же запрос из SMMS.

This is the trace I get when the login is run from DotNetNuke

This is the trace I get when running the same query from SQL server management studio

1 Ответ

2 голосов
/ 28 сентября 2011

С первого взгляда триггер выглядит нормально.

Я бы начал с проверки того, что оба приложения имеют одинаковую конфигурацию для поставщика членства и одинаковые машинные ключи.

Тогда я бы посмотрелдля любого сообщения об ошибке, которое может быть записано.Просмотрщик событий DNN (и файл журнала log4net в 6.0) являются хорошими источниками.Если нет ничего, я бы использовал sql profiler для поиска любых сообщений, связанных с процессом триггера / входа в систему.

Также можете ли вы описать ошибку более подробно?Предотвращает ли триггер вход в обе системы, или вы можете войти в систему A, но не в систему B, или вы можете получить доступ только к одной системе?

...