2011-06-29 8 views
1

私は熟考していますAFTER INSERT, DELETE, UPDATE私のデータベースの1つに変更を取り込むためにトリガします。私がしたいことの1つは、変更を行ったユーザーの名前を取得することです。トリガを使用したデータベース監査ログ - ユーザ情報

専用のSQLアカウントを使用してASP.NET MVCのデータベースに接続しているため、SUSER_SNAME()が私に正確な情報を提供するとは思われません。

ASP.NET MVC側からユーザー名をトリガーにフィードするにはどうすればいいですか?

ASP.NET側は、Active Directoryに対するWindows認証用に構成されています。

答えて

3

Set Context_Infoをご覧ください。私は監査とSQL認証を使用しているときにこれを成功させてきました。考え方は、ログオンしているユーザーのコンテキストを設定し、DBトリガーでコンテキストからこの情報を取得し、DBに格納することです。コンテキスト内でユーザーを設定することを忘れると、いつでもsuser_nameに戻ることができます(ただし、監査にはあまり役に立ちませんが、SSMSで直接変更するときには便利です)。 Googleの "Audit Trail Set Context_Info"といくつかの例があります。このoneよう

このother one

+0

すごいクール。 2番目の例では、実際にEFでどうやってやっているのだろうと思っていたので、実際にそれをまとめました。ありがとう。 – Nasir

0

Thread.CurrentPrincipalを使用すると、Windowsアカウントを取得し、これをクエリのパラメータとして渡すことができ、したがってトリガで使用できます。

var userName = Thread.CurrentPrincipal.Identity.Name; 
関連する問題