SQL Server:“アプリケーション名の変更”監査目的のプロパティ

StackOverflow https://stackoverflow.com/questions/323494

質問

アプリケーションのユーザーをSQLサーバーのユーザーとして実装しないため、アプリケーションサーバーがデータベースに接続する場合、各アプリケーションは常に同じ資格情報を使用して各データベースにアタッチします。

これは監査の問題です。トリガーを使用して、すべての更新を保存し、挿入と削除を行い、それぞれを特定のユーザーに関連付けます。考えられる解決策の1つは、「ユーザーによる更新」を追加することです。列をすべてのテーブルに追加し、毎回これを更新します。これは、すべてのテーブルの新しい列とすべてのストアドプロシージャの新しいパラメーターを意味します。また、ソフト削除のみを実行できることも意味します。

代わりに、接続文字列のApplication Nameプロパティを使用し、トリガー内のApp_Name()プロパティでこれを読み取ることを提案します。これを簡単なアプリでテストしましたが、うまくいくようです(形式はApp = MyApp | User = 100のようになります)。

皆さんへの質問は、これは悪い考えであり、より良いものがありますか?

役に立ちましたか?

解決

これには SET CONTEXT_INFO を使用します。必要なものだけです。

他のヒント

確かに実行可能なソリューションのように見えますが、アプリケーションをロードするたびに接続文字列にユーザー名を挿入する必要があります。接続文字列は毎回異なるため、このソリューションはおそらくWebアプリケーションでは動作しないことに注意してください。これにより、巨大な接続プールの問題が発生する可能性があります。

別のオプションは、ホスト名/ IPアドレスを取得して(SELECT host_name())、代わりに保存することです。

各ストアドプロシージャ(またはトリガー)を変更してApp_Name / Hostnameを自動的に挿入できるため、必ずしも各ストアドプロシージャに新しいパラメータは必要ありません。

潜在的な欠点は、Management Studioを介して実行された変更にはカスタムApp_Nameがなく、「Microsoft Management Studio」が残されることです。ユーザーとして。

アプリケーション名プロパティを使用して監査トリガーを制御しますが、それを使用する際の問題は見られず、速度の問題もありません(ただし、特定のアプリケーションの監査は特に行っていないため、何かをしないのにどれくらい時間がかかるかを測定します:))

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top