2017-05-12 6 views
0

データベースから大量のデータを削除する方法やプロセスをスピードアップする方法については多くの情報がありますが、それを避ける方法はありません。たとえばテーブルから大量の行を削除しないようにする

私は10k行のテーブルを持っています(列が何であれ)。代わりに、間違いの誰かによって書き込み

DELETE from tableName WHERE ID=123 

アプリケーションを書くの はどこ(テーブルからすべての行を削除することになります声明

DELETE from tableName 

私は このANは表示されません忘れ不可能なシナリオ)

WHERE句を忘れて行を更新する場合も同様ですWindowsアプリケーションを書きながらpdate(あなたも最初に気付くことはありません)テーブルからすべての行

UPDATE tableName set Attribute='new_Value' 

は以前のものは、実際に

幸いにもそれが唯一のテストデータベースだった)私に起こりました

私の質問は、このようなことをどうやって避けるのですか?

いくつかのアイデア:

1)アップデートを提供し、SA以外の者に権限を削除し、単一の行

2を更新するために、SQLストアド・プロシージャ/ファンクションを書かないでください)と行の数を確認してください更新/削除前のトリガー

+4

これは通常、技術的手段では解決されません。これで1回または2回、あなたの指が燃えた後は、より注意深くなる傾向があります。ある種の習慣(例えば、 'SELECT'を最初に書いた後、大量のクエリが書かれテストされたり暗黙的なトランザクションモードが使用されると、それらをより破壊的な形に変換するような傾向があります。バックアップの重要性に心を注ぐ*と回復計画を持つ*。 –

+2

うーん..私はあなたのポイントを取得していません。 '' 'DELETE FROM tablename'''を書いているのであれば、すべての行を削除してください。これが間違っていたかどうかをどうやって調べるべきですか?あなたができることは、あなたの声明の前に '' 'BEGIN TRAN''を書いてください。その後、声明を出して結果を確認してください。それらがOKであれば、トランザクションまたはロールバックをコミットします。また、「忘れた」WHERE句の場合に警告する、利用可能なSSMSの拡張機能(例えば、Red Gate Tools)もあります。 –

+0

はい、あなたは私の質問をしていないことがわかります。さて、あなたはデータベースを開発し、行はすでにデータベースに存在しているということです。誰かがデータベース内で対話するアプリケーションを作成し、選択された行をリスト(データベースにも含まれています)から削除するインタラクションを作成したいが、where句を忘れ、すべてのデータを削除するそのテーブルから。アイデアは、このような状況を分離するアイデアがあるということです(例えば、削除するものについて言及するストアドプロシージャを使用するなど) – berthos

答えて

4

私は情報システム審査員とリスクコンサルタントとしての経験から、技術的な方法ではなく、より良い内部統制を構築することで解決することをお勧めします。

大規模な組織では、年間監査中に大規模な組織に対して統制を行い、一般的なIT統制については大きな特集があります。これらのクライアントのほとんどは公開され、したがって、データは任意の潜在的な問題/リスクに敏感であるので、データベース層で:

  1. 我々は被監査のITチームは唯一のFYI(原則を 必要な権限を付与しているかどうかを見て資格が不十分な人はそのような重要なデータにアクセスする機会を持たないように、職務機能と専門知識のレベルに基づいて特定の のロールに割り当てます。

  2. 私たちはまた、生のデータを使用して、生産環境に のアクセスを許可されているかどうかを調べます。すべてのdevジョブは、モックデータを使って別々の環境で実行する必要があります。

  3. 我々はまた、人々がアクセスして更新/彼らは にすることを意味するものではないし、誤って本番データベースへ データを削除しないように、製造、テスト、およびDEV環境が適切に分離されているかどうかを確認したいです。および

  4. 重要なデータの定期的(毎日、毎週のコールド・バックアップ、または必要に応じて切り替え可能なホット・バックアップ)バックアップが実行され、最新のバックアップに簡単に戻ることができるかどうかを適切に検討するかどうかポイント。

これまでのソフトウェアエンジニアとして、私はこれは何となく面倒かもしれませんが、「これは不可能なシナリオではありません」と私は知っています。

+1

バックアップシナリオに追加すると、トランザクションバックアップの使用が考慮されるため、事故の直前にリストアを行うことができます。データを失うことなく、これは主に、前回のバックアップからインシデント時に失われたデータの量を再生成するためのリスク要因(RPOと呼ばれます)に依存します。 – Hybris95

関連する問題