タグ付けされた質問 「audit」

データベース監査には、データベースユーザーのアクションを認識するためにデータベースを監視することが含まれます。

9
データベースで削除をどのように処理する必要がありますか?
ユーザーが気を変えて、削除されたレコードを回復できるように、Webアプリケーションに「削除解除」機能を実装したいと思います。これを実装する方法についての考えは?私が検討したいくつかのオプションは、実際に問題のレコードを削除し、別の監査テーブルに変更を保存するか、レコードを削除せず、ブールの「deleted」列を使用して削除済みとしてマークすることです。後者のソリューションでは、通常の状況で「削除された」レコードを無視するために追加のアプリケーションロジックが必要になりますが、アプリケーション側でレコードの回復を実装するのがはるかに簡単になります。

4
SQL Serverのデータを削除したユーザーを見つける方法
私の上司は昨日、SQL Serverデータベースのデータを削除した人を見つける方法を尋ねる顧客からの問い合わせがありました(それが重要な場合はエクスプレス版です)。 これはトランザクションログから見つけることができると思いました(切り捨てられていなかった場合)-これは正しいですか?もしそうなら、この情報を実際にどのように見つけ出しますか?


2
変更の記録を保持するデータベースとテーブルを設計する最良の方法は?
以前の変更を追跡するために、プロジェクトに履歴機能を設定する必要があります。 今、2つのテーブルがあるとします。 NOTES TABLE (id, userid, submissionid, message) SUBMISSIONS TABLE (id, name, userid, filepath) 例:ノートに行があり、ユーザーがメッセージを変更したい。変更前と変更後の状態を追跡したい。 これらの各テーブルに列を設定する最善の方法は、アイテムが「古い」かどうかを示すことです。0アクティブであればOR削除/不可視の場合は1。 また、以前の状態、新しい状態、これらのIDが関連するAUDIT TRAILテーブルを保持する履歴()テーブルを作成したいのですが。idid

1
Azureでデータベースをv11からv12にいつ、誰が更新したかを確認できますか?
今日、私はすべてのAzure SQLデータベースサーバーがv11からv12に更新されたことに気付きました。私は自分の会社でこれらのダイヤルに触れる必要がある唯一の人ですが、アクセスできるのは私の会社だけではありません。このアップグレードを開始しなかったため、誰が、いつこの計画外の更新が行われたのかを知りたいと思います。 WTFに情報を丁寧に尋ねるアクセス権を持つ社内の全員にメールを書くことができることは知っていますが、できるだけ多くの事実との会話を開始したいです。また、すべてのサーバーをアップグレードするのはあまりにも意図的に感じられるため、これはMicrosoft / Azure SNAFUであると思う傾向があります。

5
eコマース注文表。価格を節約するか、監査/履歴テーブルを使用しますか?
初めてのeコマーススキーマを設計しています。私はしばらくの間このテーマについて読んでいますが、との関係について少し混乱order_line_itemしていますproduct A productを購入できます。さまざまな詳細がありますが、最も重要なのはunit_priceです。 Anがorder_line_itemへの外部キーがあるproduct_id、購入quantity購入しunit_priceた時点で、顧客が製品を購入します。 私が読んだもののほとんどは、を明示的に追加unit_priceするorder_line_item必要がある(つまり、を介して参照しないproduct_id)と述べています。店舗は将来的に価格を変更する可能性があり、注文レポート、追跡、整合性などを台無しにする可能性があるため、理にかなっています。 私が理解していないことは、なぜunit_price値を直接保存するのorder_line_itemですか? のunit_price変更を記録する監査/履歴テーブルを作成する方が良いproductでしょうか? ときにorder_line_item作成され、の外部キーproduct_auditテーブルが追加され、価格はそこから(参照によって)取得することができます。 このアプローチを使用することには多くの利点があるように思えます(データの重複、価格変更履歴など)。このアプローチを使用するeコマーススキーマの例に出くわしていませんが、何か不足していますか? UDPATE:私の質問はSlowly Changing Dimensionに関連しているようです。ただし、緩やかに変化するディメンションはデータウェアハウスとOLAPに関連しているため、私はまだ混乱しています。それで、Slowy Changing Dimensionタイプをメインのビジネストランザクションプロセスデータベース(OLTP)に適用できますか?私は多くの概念を混ぜているのだろうか、いくつかのガイダンスを大いに感謝します。

1
SQL Server監査データからスカラー値のユーザー定義関数の使用を除外する方法
データベースに対するすべての実行アクションを監査するデータベース監査仕様を持つSQL Serverデータベースがあります。 CREATE DATABASE AUDIT SPECIFICATION [dbAudit] FOR SERVER AUDIT [servAudit] ADD (EXECUTE ON DATABASE::[DatabaseName] BY [public]) 一部のクエリは、結果セットのすべての行に対してスカラー関数の使用を監査ログに書き込むことがわかっています。これが発生すると、ログがETLで最終的な休憩場所に達する前にログがいっぱいになり、ログにギャップが生じます。 残念ながら、コンプライアンス上の理由により、すべてのEXECUTEステートメントの監査を停止することはできません。 この問題へのアプローチについて最初に考えたのはWHERE、サーバー監査の句を使用してアクティビティを除外することです。コードは次のようになりました。 WHERE [object_id] not in (Select object_id from sys.objects where type = 'FN' ) 残念ながら、SQL ServerはリレーショナルIN演算子を許可しません(おそらく、監査ログに書き込む必要があるたびにクエリを実行したくないためです)。 私たちは、どのハードコードストアドプロシージャ書き込みを避けたいobject_idにWHERE句が、それは、この問題にアプローチする最良の方法で私たちの現在の考え方です。考慮すべき代替アプローチはありますか? 再帰CTEでスカラー関数が使用されている場合、結果セット内のすべての行の監査ログにクエリが書き込まれることに気付きました。 ベンダーが提供するいくつかのスカラー値関数がありますが、それらを削除したり、代替データベースに移動したりすることはできません。

3
トリガーを使用せずにSQL Serverでクエリを実行するクライアントのIDを見つけますか?
現在Change Data Capture(CDC)を使用してデータの変更を追跡しています。変更を行ったクエリを送信するクライアントのホスト名とIPアドレスを追跡したいと考えています。同じユーザー名でログインしている5つの異なるクライアントがある場合、5つのうちどれがクエリを起動したかを追跡するという難題に直面します。私が見つけた他の疑わしい解決策には、次のコマンドでCDCテーブルを変更することが含まれます。 ALTER TABLE cdc.schema_table_CT ADD HostName nvarchar(50) NULL DEFAULT(HOST_NAME()) ただし、これは、クエリが起動されたサーバーのホスト名を返し、クエリを起動したクライアントのホスト名は返しません。 この問題を回避する方法はありますか?クライアントのホスト名またはIPアドレス(または他の種類の一意のID)をログに記録するのに役立つもの。トリガーを使用したくありません。システムが遅くなるだけでなく、CDCがシステムテーブルを生成するため、トリガーを設定することは明らかに不可能です。

3
誰がレコードを削除したかに関する情報を削除トリガーに渡す
監査証跡を設定する際に、テーブルのレコードを更新または挿入している人を追跡することには問題はありませんが、レコードを削除した人を追跡することはより問題が多いようです。 挿入/更新フィールドに「UpdatedBy」を含めることで、挿入/更新を追跡できます。これにより、INSERT / UPDATEトリガーはを介して "UpdatedBy"フィールドにアクセスできますinserted.UpdatedBy。ただし、削除トリガーを使用すると、データは挿入/更新されません。誰がレコードを削除したかを知ることができるように、情報を削除トリガーに渡す方法はありますか? これは挿入/更新トリガーです ALTER TRIGGER [dbo].[trg_MyTable_InsertUpdate] ON [dbo].[MyTable] FOR INSERT, UPDATE AS INSERT INTO AuditTable (IdOfRecordedAffected, UserWhoMadeChanges) VALUES (inserted.ID, inserted.LastUpdatedBy) FROM inserted SQL Server 2012の使用

4
MySQLデータベースのログインを監査する
MySQLへのログインを監査する方法はありますか?各従業員のユーザー名を作成して、ログインの監査証跡を作成できるようにしたいと考えています。しかし、ググリングは良い結果をもたらしていません。 監査できる数が多いほど良いです。少なくとも、いつ誰がログインしたかを知っておくとよいでしょう。だれがどのクエリをいつ実行したかを確認したほうがよいでしょう。データベースには機密情報が含まれている可能性があるため、ログは主にクライアントにログを提供するためのものです。 明らかに、各ユーザーが(いつ)実行したクエリを監査できることで、セキュリティ問題が発生した場合に、その原因を正確に特定できるようになります。


2
拡張イベントとSQL監査-パフォーマンスへの影響
UPDATE/INSERT非常にアクティビティの多い特定のテーブルのステートメントを監視するために、データベースに監査証跡のようなシステムをセットアップしたいと思います。私の目の前には、SQL Serverの組み込み監査システムを使用するか、拡張イベントを使用するという2つのオプションがあります。 SQL Server Auditは内部的に拡張イベントを使用するため、拡張イベントの代わりに直接監査を使用すると、ある種のオーバーヘッドがあると思います。 どのシステムがサーバーに影響を与えているかを分析するためのテストを行う方法はありますか?XEセッションが作成されたときに実際に何が起こるかを知ることができれば、サーバーへの影響を分析するのに役立ちます。 トリガーを検討し、オーバーヘッドのためにそのオプションを省略しました。しかし、それはインターネットからの情報に基づいて決定されました。

3
共有ログインを使用しているときに、監査テーブルで削除アクションを実行しているユーザーを知る方法は?
背景情報: アプリの一連のデータテーブルに対する更新と削除を追跡するために、監査テーブルのコレクションを作成しています。 監査レコードはトリガーを介して作成されます。 アプリのデータベースのDMLは通常、サービスがデータベースにアクセスするために使用するログインから取得されます。このためSYSTEM_USER、トリガーで呼び出されたときの結果は常に同じになると思います。 私のアプリは現在ユーザーデータを保存していませんが、UserIdDMLが実行されるたびに文字列が与えられます(ストアドプロシージャでのみ行われます)。 私が遭遇した問題は、ユーザーがレコードを削除するときに、誰がそれをしたのか知りたいということです。同じログインによって行われるため、すべてのアクションがサービスによって行われたことを確認したくありません。どのユーザーがそれを実行したかを確認したいと思います。ModifiedBy更新の送信で更新される列があるため、これは更新の問題ではありませんUserId。 問題はSYSTEM_USER、削除が実行されたときに、ユーザー情報をトリガーに設定する方法、またはトリガーに取得する方法はありますか? 私が現在持っている「最高の」アイデアは、それが良いアイデアかどうかはまだわかりませんが、サービスで、現在のものUserIdがデータベースとしてユーザーに存在するかどうかを確認し、そうでない場合はユーザーを作成することです彼らのためのオブジェクト。次に、でストアドプロシージャを実行しEXECUTE AS User = @UserIdます。次に、ストアドプロシージャでDMLが実行され、トリガーが起動すると、SYSTEM_USERからユーザーを返す必要がありEXECUTE ASます。

4
DBポリシーがセキュリティ監査に合格する必要があることを確認するために何をする必要がありますか?
私は近々監査を行っており、ERPシステムのデータベースを監査するときに監査人がどのような物理的、電子的、論理的なアクセス制御を探すのか疑問に思っていました。私はこのプロセスに本当に慣れていないので、どんなガイダンスもいただければ幸いです。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.