1

現在、ASP.Net MVC アプリケーション用に SQL Server 2008 インスタンスをセットアップしており、SQL Server インスタンスは組み込みの監査機能を使用しています (CDC だと思いますか?)。

また、ログインしているユーザー (約 50 人のユーザー) に関係なく、アプリケーション全体に対して web.config で指定された1 つの接続文字列を使用するように ASP.Net アプリケーションをセットアップしました。

問題: 問題の特定の変更を行ったユーザーのユーザー名を監査情報に含めたいと考えています。

これは、次の 2 つの方法のいずれかでしか実行できないようです。

  1. アプリケーションのセットアップを変更して、すべてのユーザーが独自のデータベース ログインを取得できるようにします。これには、動的な接続文字列を使用する必要があります (おそらくそれほどひどいものではありません)。さらに、システムに新しいユーザーを追加するのは面倒であり、管理者はアプリケーションのインターフェイスを介して自動的にそれを行うことができなくなります (私は思う)。
  2. ASP.Net アプリ自体から別のソリューションを使用します。これにより、必要な情報をアプリケーションに簡単に追加できますが、組み込みソリューション全体を廃棄し、実質的にゼロから始めることになり、かなりの労力が必要になります。

誰かが監査を行う前にこの問題に遭遇したに違いありません - #1は実現可能ですか?それとも、ここに行くことができる唯一の方法は #2 ですか?

ありがとう

4

1 に答える 1

1

オプション #1 は管理者にとって苦痛であり、"動的な" 接続文字列のコードが少し複雑であり、sp_addlogin を呼び出してユーザーを作成します。しかし、最悪の場合、ユーザーごとに別々の DB ログインを使用して、DB に直接クエリを実行することもできます (インスタンスとデータベース名を知っている場合、何らかの方法で漏洩し、ネットワークを介して DB サーバーを「見る」ことができます)。DB への直接アクセスは、すべてのアプリケーションをクラッシュさせる可能性があります。DBサーバーがユーザーに直接到達できないことが確実でない限り、これを行わないでください。

#2について。すべての挿入/更新中にログインしているユーザーのログインを配置するすべてのテーブルに列「LastModifiedLogin」を追加するのはどうですか? これで CDC がクラッシュすることはなく、必要なものが得られます。ただし、ステートメントを発行すると、ログインを配置できる行がなくなるため、削除の監査はほとんど問題になりません。個別の「DeleteAudit」テーブルを編成して、削除ごとにテーブル名、行識別子、およびユーザー ログインを配置することもできますが、それは大まかな考えにすぎません。

データ アクセスに NHibernate を使用している場合は、CDC を NHibernate Envers に切り替えることを検討することをお勧めします。これは非常に優れたソリューションです。

于 2012-10-17T20:22:01.417 に答える