2

現在、多くのユーザーがアクセスして変更できるデータベースがあります。は、トリガーを使用してデータベース内のテーブルへのすべての変更を保存するログ データベースでもあります。

データベースで変更される前に編集を承認する機能を追加したいと考えています。

これについて最善の方法は何ですか?

4

2 に答える 2

1

私たちのサイトの 1 つに似たようなものがあり、たくさんのテーブルを追加しました。

users sites...など

次に、たくさんのシャドー テーブルがあります。

users-shadow sites-shadow...など

シャドー テーブルは、変更を行ったユーザー用に追加された行を除いて、実際のテーブルと同じ構造を持っています。まず、データベース アクションの承認が必要なユーザーによって変更が送信されたときに、このクエリを使用します。

REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);

明らかに、これがインジェクションに対して開かれていないことを確認し、準備されたステートメントなどを使用してください。

承認されると、テーブルの行がshadowテーブルから単純に削除されshadowuser_mod値が削除され、変更 (null 以外の値) が実際のテーブルに挿入されます (または、指定されている場合は、 REPLACE構文idを使用して更新されます)。このロジックは perl で行っているため、残念ながらそのための SQL は手元にありません。

SQLREPLACEはではなくDELETEと を実行することに注意してください。この動作を許可するには、トリガーを修正する必要があります。INSERTUPDATE

注: 「承認」フラグを使用しなかった理由は、既存のレコードを修正する機能が必要だったためです。もちろん、同じ主キーを持つ複数のレコードを持つことはできませんでした。

于 2013-05-22T13:38:53.933 に答える