問題タブ [audit-tables]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
sql - トランザクションでのテーブルの更新(Service Brokerを使用した監査トリガーを使用)
サービスブローカーを使用して監査機能を実装し、監査が必要なテーブルにトリガーを実装しました。私たちが直面している問題は、トランザクション内から監査可能なテーブルを更新しようとすると、エラーが発生することです-
現在のトランザクションはコミットできず、ログファイルに書き込む操作をサポートできません。トランザクションをロールバックします。
ただし、監査可能テーブルからトリガーを削除すると、すべて正常に機能します。トランザクション内でテーブル(トリガー付き)を更新することはできませんか、それとも最後に何かが不足していますか?
トランザクションの更新
引き金
トリガー内から呼び出されたストアドプロシージャ(procAuditSendData)
(@AuditedData XML)AS BEGIN BEGIN TRY DECLARE @dlgId UNIQUEIDENTIFIER、@ dlgIdExists BIT SELECT @dlgIdExists = 1
終わり
mysql - undo-redo を使用して SQL データベースを設計する方法は?
Undo-Redo を許可するように DB テーブルを設計する方法を見つけようとしています。
次の構造を持つタスクテーブルがあるとします。
ここで、数日にわたって複数のログインが行われ、複数の編集が行われたと仮定します。しかし、ユーザーはいずれかのバージョンに戻りたいと考えています。
- 変更を追跡する別のテーブルを用意しますか?それとも、タスクテーブル内に変更を保持しようとしますか(より適切な用語がないため、「ゴースト」行)。
- すべての列を追跡しますか、それとも毎回変更された列だけを追跡しますか?
問題があれば、MySQL を使用しています。また、問題があれば、履歴 (ala Photoshop) を表示して、ユーザーが任意のバージョンに切り替えられるようにしたいと考えています。
おまけの質問:memo
変更時にセル全体を保存しますか、それともデルタのみを保存しようとしますか? 私が尋ねる理由は、memo
セルが大きくなる可能性があり、リビジョンごとに 1 つの単語または文字のみが変更される可能性があるためです。確かに、デルタを保存するには解析が必要ですが、元に戻す操作がそれほど頻繁に行われないと予想される場合は、処理時間よりもスペースを節約する方がよいのではないでしょうか?
ご協力ありがとうございました。
database - データ履歴追跡のベストプラクティス
一部のテーブルで、データの変更を追跡する必要があります。このタスクを達成する方法についていくつかのアドバイスが必要です。私たちの心には2つの通りがあります。1)次のレコードを使用してテーブルを作成します:ユーザーID、日付変更、テーブル名、フィールド名、フィールドタイプ、フィールド値。このように、トリガーで追跡します。
2)ステータスと呼ばれる履歴を追跡するために必要なすべてのテーブルに状態フィールドを追加します。このフィールドの値は次のとおりです。I=挿入-D=削除-M=相対的な日付と変更で変更。このようにして、常に最新の有効な行と以前のすべてのデータ変更を知ることができます3)それはあなたの心の中にありますあなたは何を提案しますか?
sql-server-2008 - SQL Server 2008 で外部監査データベースに書き込むにはどうすればよいですか?
テーブルを挿入、更新、および削除する権限を持つ 10 人の Windows ユーザーを持つ SQL Server 2008 データベースがあります。各テーブルには、異なるデータベースの監査テーブルに書き込むトリガーがあります。
現在、これが機能するには、ユーザーに監査データベースへの書き込み権限も付与する必要があります。そうしないと、トリガーがエラーをスローします。
個々のユーザーにのみ挿入許可を与えることができましたが、この問題に対するより洗練された解決策があることを期待していました. 特に、ユーザーが削除/追加されるという観点からすると、1 つではなく 2 つのデータベースに設定することになります。
理想的には、すべての監査作業を行う 1 つのアカウントを使用したいと考えています。
database - SQLServer2005の監査
背景 4つの異なるアプリケーションが接続して変更を加える本番SQLServer2005サーバーがあります。外部キーはなく、場合によっては主キーもありません。残念ながら、すべてを捨ててゼロから始めることは選択肢ではありません。したがって、私の解決策は、各アプリケーションのサービスレイヤーアプローチへの移行を開始して、データベースに直接接続するアプリケーションが1つだけになるようにすることです。
ただし、そのサービスレイヤーが作成され、すべてのアプリケーションが移行される前に修正する必要のある問題があります。
したがって、変更を加えて、4つの不適切に記述されたアプリケーションのいずれも壊れないことを期待するのではなく(すべての機能をすばやくテストする方法がない)、私の解決策はデータベースの監査を開始することです
問題 SQLServer2005の各ユーザーがアクセス/更新/呼び出しているストアドプロシージャ、テーブル、列、ビューを監査するにはどうすればよいですか。
どのテーブルが更新されているかはわかりますが、どの列とどのユーザーによって更新されているのかわかりません。また、特定のテーブルがストアドプロシージャ/ビューを介してのみアクセスされているかどうかもわかりません。
SQL Server 2008の監査機能が優れていることは知っていますが、お金をかけずにこれを実行できれば、それは素晴らしいことです。とはいえ、最善の解決策がソフトウェアをアップグレードまたは購入することである場合、それもオプションです。
sql-server - 監査のための更新時の SQL-Server トリガー
一部のテーブルで変更された列を監査テーブルに登録する簡単/一般的な方法が見つかりません。
この方法で更新後にトリガーを使用してそれを実行しようとしました:
まず、監査テーブルの定義:
次に、任意のテーブルでの AFTER UPDATE のトリガー:
問題点
- exec 関数を使用すると、Inserted と Deleted でコンテキストが失われました
- colnumber 常に相関数であるとは限らないようです。20列のテーブルを作成し、1つを削除して別のテーブルを作成すると、最後の列には数値> @colcountがあるようです
ネット上で解決策を探していましたが、わかりませんでした
何か案が?
ありがとう!
c# - 「アップデートのみを取得する」デザイン
私のシステムは、サーバーから更新のみを取得する必要があります。データベースを設計するにはどうすればよいですか?監査テーブルがありますか、それとも他の設計メカニズムがありますか?私が計画しているのは、デバイスから更新IDを送信し、新しい更新を取得することです。これを実際に実装する方法は?
sql - 監査テーブル使用時のクエリ ヘルプ
2 つのテーブルがあると仮定します。1 つには、lease_period と呼ばれる次の列があります。
tenant_trading_name、suite_id、lease_id、build_id
もう 1 つは、次の内容を含む lease_period_audit と呼ばれます。
audit_date, audit_type, tenant_trading_name, suite_id, lease_id, building_id
lease_period でレコードが更新され、lease_period_audit で「更新済み」ステータスのエントリが作成されるたびに。tenant_trading_name フィールドのみに加えられたすべての更新を見つけようとしていますが、成功していません。これまでのところ、次のものがあります。
ここで私の思考プロセスのどこに欠陥がありますか? これはどのように行うことができますか/これについてどのように考えるべきですか?
api - 監査テーブルまたは改訂履歴の状況でのPUTとPOST
レコードを更新するためのRESTメソッドがあるとしましょう。リソースを更新しているため、これは明らかにPOSTになります。ただし、同じ動きで、監査または改訂履歴テーブルに新しいレコードを作成する必要があります。
POSTとPUTのどちらを使用するかについて、ここに標準またはベストプラクティスがありますか?
RESTメソッドは、ユーザー側で発生していることから発生しますか、それともデータベースで発生していることから発生しますか?
1つの可能性は、1つのメソッドを呼び出すだけです。このメソッドは、あるテーブルのレコードを更新し、別のテーブルに新しいレコードを作成します。
もう1つの可能性は、POSTが1つのテーブルのみを更新するように強制することであり、監査テーブルでPUTを実行するための追加のメソッドが必要になります。これは2つの方法の使用を強制し、開発者に責任を負わせますが、私はあまり熱心ではありません。
sql - 内側のクエリで最大値を選択 < 外側のクエリで別の値を選択
Trip_aud と Event_aud という 2 つの監査テーブルがあります。それらは Envers で作成されましたが、SQL でクエリを実行しています。これらは基本的にドメイン テーブルと同じですが、変更があるたびにリビジョン値が増加し、監査テーブルにいくつかのタプルが挿入されます。
Trip が特定のステータス ( PLANNING
-> EXECUTING
) から変更されると、現在のリビジョンを保存するので、その後、実行されたもの (出発時間など) と計画されたものを比較できます。これらのイベント (出発、停止、待機中...) は、Trip へのポインターと共に Event に格納されます。イベントも監査されます。
Envers は CVS システムのように機能します: 特定のリビジョンで何らかの要素を照会すると、特定のリビジョンよりも小さい最大リビジョンを持つタプルが検索されます。私が興味を持っているリビジョンは、状態が変化したときに保存される Trip のものです。特定のリビジョンの旅行からすべてのイベントを選択するにはどうすればよいですか?
テーブルの外観は次のとおりです。org_rev
ステータスが変更される出張リビジョンです。
リビジョン 3 の旅行とイベントが必要な場合は、
リビジョン 44 で、計画が終了した時点で、
計画と実行を比較するために次のクエリを作成しましたが、何も返されません! EVENT_AUD で自己結合を行い、リビジョンの順序のみが異なるタプルの重複を排除し、トリップ時rev
よりも小さい最大値を選択しようとしますorg_rev
。
t.org_rev
不思議なことに、 44に置き換えるとうまくいきます。私は何を間違っていますか?
助けてくれてありがとう!
メタ: CSV、XML、INCLUDE INTO などで、私が求めている SQL を人々がテストできるように、データベースの例を少し提供することは期待されていますか? 質問に添付するにはどうすればよいですか?