0

監査証跡用に SQL テーブルにトリガーを設定しました。これがトリガーコードです。

ALTER TRIGGER [dbo].[tri_bowzer_UPDATE] ON [dbo].[Bowzer] 
For Update 
AS
    INSERT Table_Audit(TableName, Action, UserName, ComputerName) 
       SELECT  
          'bowzer', 'U', suser_sname(), host_name()

正常に動作し、デスクトップ アプリケーションでユーザー名とコンピューター (クライアント) 名を表示します。しかし、ASP.NET アプリケーションでは、共通の SQL ログインを使用して、このログインを使用してデータベース操作を実行できるようにしています。この ID により、SQL Server がサーバー マシン名を取得していることを理解しています。ただし、データベース操作が実行されるたびにクライアント マシン名を取得したいと考えています。

クライアント マシン名を取得するには、どのような変更を加えることができますか??

4

3 に答える 3

0

このデザインは、あなたが達成しようとしていることに本当に適していません。データを更新したユーザーのユーザーIDまたはマシン名を格納できるデータベースにupdatedby列を追加することを検討します。

このようにして、トリガーロジックを単純に保ち、パフォーマンスを低下させる可能性のあるデータベースへの接続が多すぎるのを防ぎます。

于 2013-02-18T16:11:45.127 に答える
0

T-SQL を使用してクライアントの IP アドレスを設定SET CONTEXT_INFOし、関数を使用してトリガーでこのデータを取得できCONTEXT_INFOます。

于 2013-02-18T10:18:42.310 に答える
0

以下のように、接続文字列プロパティ WSID (ワークステーション ID) を指定するには、接続文字列を微調整する必要があります。

string strconn = "data source=SQLSERVER;initial catalog = DBNAME ; uid=sa;pwd=password;  WSID=" + (System.Net.Dns.GetHostEntry(Request.ServerVariables["remote_addr"]).HostName);

そしてHOST_NAME()、トリガーでクライアントマシン名として値を取得します

MSDN : http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

于 2013-02-18T07:29:43.537 に答える