web-dev-qa-db-ja.com

破壊的なデータベースコマンドを無効にする方法は?

ほとんどのシステム管理者は、DROPやDELETEなどの破壊的なコマンドがハッカーによって管理対象のSQLデータベースに対して実行されるリスクを理解しています。 MySQL/MS SQL/PostgreSQLを構成するか、オープンソースの場合はソースコードを変更してこれらの危険な機能を削除するなどして、このようなコマンドの実行を完全に無効にする方法はありますか?.

 Once you have your webapp online,
 would someone with honorable intentions
 ever need to DROP a table?!

これは、これらの完全に不要なコマンドを防止しようとするのではなく、「プライマリ」DBセキュリティの聖杯ソリューションである可能性があります。もちろん、開発期間中または保守可能な期間中に、それらを再度有効にして、不要になったらオフにすることができます。

2
Robinicks

SQL Server 2005のDDLトリガーを使用すると、テーブルの削除や変更を無効にできます。

データベースとの対話をストアドプロシージャに制限する場合は、これについて心配する必要はありません。アプリアカウントはストアドプロシージャのみを実行できるため、SQLインジェクションの権限はありません。

それができない場合は、削除する権限を削除して、任意のタイプのDDLを実行できます。それは何もないよりはましです。しかし、誰かがあなたのすべてのデータをNullで更新したい場合は、そうすることができます。

あなたwill貴重なデータがある場合は最新の状態に保たれるバックアップがあります。そうしないと、仕事や仕事から離れてしまいます。

6
Sam

データベースファイアウォールを確認することをお勧めします。 GreenSQLはオープンソースのものです: http://www.greensql.net/

乾杯

2
HTTP500

これはすでに存在するため、dbコードを変更する必要はありません。人々がそれを使わないというだけです。ほとんどのWebアプリには、挿入、選択、更新、削除、および作成の機能が必要です。多くのインストールプロセスでは、特権ユーザーを使用して、最小限の特権で必要なアカウントとデータベースを作成するプロセスを順を追って説明します。 IIRCmediawikiはこれをかなりうまくやっています。

ただし、web-app dbユーザーがそのdbに対する完全な特権を持っているか、最悪の場合はdbのインストール全体に対する完全な特権を持っている、見つけたWebアプリの数を数えることはできません。さらに、一部のアプリは、あまりにも多くの特権を必要とする方法で構築されています。または、管理機能に内部の特権アカウントと非特権アカウントを使用しないでください。

2
kashani

これはファイルアクセスと同じです。ユーザーアカウントには、ジョブを実行するために必要な最小限の権限が必要です。ドロップなどの権限は、絶対に避けられない場合を除いて、管理者レベルのアカウントにのみ付与する必要があります。どうしても避けられない場合は、アプリケーションの設計を確認する必要があります。削除は頻繁に必要になりますが、必要なテーブルのみに制限する必要があります。

権限を付与するときに注意と常識が使用されている場合は、コードを変更する必要はありません。潜在的に危険なコマンドを完全に削除すると、データベースシステムが保守できなくなる可能性があります。

1
John Gardeniers

はい、データベースが本番環境の場合、作成した一時テーブルを削除する必要がある場合があります。

本当に妄想的な場合は、開発者にビューとストアドプロシージャを使用してもらい、通常はテーブルにアクセスできるアカウントが実際に直接操作できず、代わりにビュー/プロシージャを介してアクセスする必要があります。

少なくともmysqlでは、アカウントにテーブルを作成および削除する機能を与える必要はありません。時間をかけて permissions システムを確認し、アカウントを正しく制限してください。

パフォーマンスを犠牲にして使用できるもう1つのオプションは、すべてのアクセスを Mysql Proxy を介して実行し、不要なものをすべてブロックするパラノイドフィルターを使用することです。

1
Zoredache

私たちが行ったことは、db_denydatawriterロール(SQLServerのみ)に全員を追加することです。これにより、挿入、更新、および削除のアクセス許可がすべて削除されます。

次に、ストアドプロシージャを通じて、Webユーザーのデータベースへのすべてのアクセスを制御します。独自のストアドプロシージャを作成する権限を与えず、ストアドプロシージャ内で任意のSQLを実行することを許可しない場合は、かなりロックダウンされます。

これは、テーブルを削除できないことを超えていますが、どこでもストアドプロシージャを使用していない場合は、コードの変換で大きな戦いに直面する可能性があります。

0
mjallday