現在、多くのユーザーがアクセスして変更できるデータベースがあります。は、トリガーを使用してデータベース内のテーブルへのすべての変更を保存するログ データベースでもあります。
データベースで変更される前に編集を承認する機能を追加したいと考えています。
これについて最善の方法は何ですか?
現在、多くのユーザーがアクセスして変更できるデータベースがあります。は、トリガーを使用してデータベース内のテーブルへのすべての変更を保存するログ データベースでもあります。
データベースで変更される前に編集を承認する機能を追加したいと考えています。
これについて最善の方法は何ですか?
私たちのサイトの 1 つに似たようなものがあり、たくさんのテーブルを追加しました。
users
sites
...など
次に、たくさんのシャドー テーブルがあります。
users-shadow
sites-shadow
...など
シャドー テーブルは、変更を行ったユーザー用に追加された行を除いて、実際のテーブルと同じ構造を持っています。まず、データベース アクションの承認が必要なユーザーによって変更が送信されたときに、このクエリを使用します。
REPLACE INTO users-shadow (user_mod,id,username,password,salt...) VALUES (16,50,'bob','stuff','salt'...);
明らかに、これがインジェクションに対して開かれていないことを確認し、準備されたステートメントなどを使用してください。
承認されると、テーブルの行がshadow
テーブルから単純に削除されshadow
、user_mod
値が削除され、変更 (null 以外の値) が実際のテーブルに挿入されます (または、指定されている場合は、 REPLACE構文id
を使用して更新されます)。このロジックは perl で行っているため、残念ながらそのための SQL は手元にありません。
SQLREPLACE
はではなくDELETE
と を実行することに注意してください。この動作を許可するには、トリガーを修正する必要があります。INSERT
UPDATE
注: 「承認」フラグを使用しなかった理由は、既存のレコードを修正する機能が必要だったためです。もちろん、同じ主キーを持つ複数のレコードを持つことはできませんでした。