0

簡単な記録管理のために、単純な ASP.NET Details と Grid View を 2 つの別々のページに作成中です。詳細ビューはデータベースにレコードを入力するために利用され、グリッド ビューはこれらのレコードの更新に利用されます。IIS サーバーでは「Windows 認証」のみが有効になっていることに注意してください。

私が追加しようとしている機能の 1 つは、レコードがデータベースに挿入または更新されたときの監査です。SQL Server 2012 で CURRENT_TIMESTAMP コマンドを使用して、レコードが挿入または更新されるタイミングを入力しています。ただし、特定のレコードを更新または挿入した Active Directory ユーザーを書き込もうとしています。最初に SYSTEM_USER コマンドを利用しようとしましたが、データベースに書き込むのは SQL サーバー サービス アカウントまたは dbo アカウントだけであり、これは受け入れられません。SQL Server サービス アカウントが書き込まれている理由は理解していますが、現在の Active Directory ユーザーの名前を以下に示すように「ユーザー名」フィールドに書き込む必要があります。

タイムスタンプとユーザー名に現在使用しているコマンドは次のとおりです (これは、私が使用している正確な SQL コマンドではありません)。

INSERT INTO <table-name> ([timestamp], [username]...) VALUES (CURRENT_TIMESTAMP, SYSTEM_USER...)
UPDATE <table-name> SET [timestamp] = CURRENT_TIMESTAMP, [username]) = SYSTEM_USER WHERE.....

SQL Server サービス アカウントの資格情報ではなく、特定のレコードを挿入または更新するたびに、現在の Active Directory ユーザーの名前を「ユーザー名」フィールドに書き込む最良の方法は何ですか?

前もって感謝します!

4

2 に答える 2

2

どのように SQL Server に接続していますか? SQL 認証または Windows 認証を使用して接続していますか?

SQL 認証を使用している場合、データベース コマンド (クエリ) と共にその情報を渡さない方法はありません。

Windows 認証を使用している場合、ASP.NET でユーザーを偽装していますか? そうでない場合は、SQL 認証と同じ問題です。

ASP.NET で偽装を使用している場合は、SYSTEM_USER必要なものが得られるはずです。

Web サイトで AD 以外のユーザー ストアでフォーム認証を使用している場合、SQL 認証と同じ問題が発生します。

次のように考えてみてください。SQL Server は Web サイトのユーザーを認識していますか? Windows 認証で偽装を使用しているか、SQL Server にユーザー名を伝えている (つまり、コマンド ステートメントでユーザー名を渡している) 場合を除き、ほとんどの場合、できません。

于 2013-01-14T21:43:47.370 に答える
0

アプリケーションのユーザー名を context_info 変数に保存できます。その後、トリガーまたは必要な場所でそれを取得します。

これは、SQL への各接続が確立される前に行う必要があります。通常、接続用のコードは 1 か所にしかないため、簡単に行うことができます。

于 2013-01-14T21:49:14.867 に答える