2011-09-28 16 views
0

私は2つのDBがある古いWebアプリケーションでいくつかのメンテナンスを行っています。 1つはWWWフロントエンド(DotNetNuke)用で、もう1つは管理バックエンド用です。どちらのアプリケーションもユーザーのためにaspnet_membershipを使用しており、アプリケーション間でログインを同期したいと考えています。私はトリガーでこれを行うと思っていましたが、トリガーを追加するとログインが失敗します。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サーバの動作をトレースし、Webサーバでクエリが実行されてからSMMSから同じクエリを手動で実行するまでトレースに非常に奇妙な違いがあることを発見しました。トリガがOKに見える一見

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

答えて

2

まず、両方のアプリケーションがメンバーシッププロバイダーと同じマシンキーに対して同じ構成を持っていることを確認します。

次に、記録される可能性があるエラーメッセージを探します。 DNNイベントビューア(および6.0のlog4netログファイル)は良いソースです。何もない場合は、SQLプロファイラを使用してトリガ/ログインプロセスに関連するメッセージを探します。

さらに詳しい説明ができますか?トリガーは両方のシステムへのログインを防ぎますか、またはシステムAにログインできますか?システムBにログインできませんか、または1つのシステムにしかアクセスできませんか?

+0

設定がアプリの間で同じではありません。 (1つのDBが異なる)、マシンキーの意味は? – devzero

+0

DNNイベントビューアは、ログイン、イベントに関連するすべてのエラーメッセージを記録していませんが、設定されています。 Log4net私はあなたが何を意味するのか分かりません。 SQLプロファイラはエラーを報告しません。私が得るエラーメッセージは、 "Innlogging feilet"です。解決策でこのエラーテキストを見つけることができません。DBのどこかにあるかもしれませんか? – devzero

+0

メンバーシッププロバイダーは、db以外のすべての同じ設定が必要です。マシンキー(http://msdn.microsoft.com/en-us/library/ff649308.aspx)は、パスワードを暗号化/ハッシュするために使用されます。両方のアプリケーションで同じでない場合、パスワードは機能しません。 – ScottS

関連する問題