Я занимаюсь обслуживанием старого веб-приложения, в котором у нас есть 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.