• ベストアンサー

データベースを使うメリットとは?

最近見かけるほとんどのWebアプリは何らかの形でDBと共稼動しています。 私は今までDBを本格的に触ったことがないので分からないのですが「DBを使うメリット」とはいったい何なのでしょうか? 例えば会員サイトを構成した場合、会員に個人情報を登録してもらうことにします。この場合、WWW上から見れないディレクトリにログをためればいいのではないでしょうか?読み込ませる場合も<>かなにかで区切れば何の問題もないように思えます。最近ではSQLインジェンクションなどの攻撃も目立ちDB関連による個人情報流失のニュースをよく目にします。 どうぞよろしくお願いいたします。

  • MySQL
  • 回答数4
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • haru1234
  • ベストアンサー率47% (22/46)
回答No.2

まず回答の前に >なぜかと申しますと、ntel_404が仰った、ログ方式のデメリットは 敬称が抜けていましたね、ntel_404さん申し訳ありません。 訂正とお詫びをいたします。 >ここが、ちょっと理解できません。どうしてログ形式だとはるかに危険なんでしょうか? さて、こちらの件に関してですが、 ログ方式の場合、ざっと考えて以下のような脆弱性が考えられます。 ・共有サーバの場合、適切なセキュリティ設定を「サーバ管理者が」行わないと  データファイルが別の共有サーバ利用者から閲覧できる。 ・WEBサービスの実行権限(UNIXならnobody等)が奪取できる脆弱性が見つかった場合、  データファイルが閲覧できることと同義である。 ・WWW上から見れるディレクトリにデータファイル置いた場合、適切に設定を行わないと  誰でもデータが見れてしまう。 ・スクリプト言語の脆弱性が見つかった時、データファイルの閲覧が出来る  可能性が高い。 こんなことろでしょうか。 まあぶっちゃけて言ってしまえばデータベースを使えば以上に上げたものが完璧に防げるかというと 全然そんなことはありません。 しかし以上に上げた脆弱性の特徴として「WEBサービス」に何らかの問題ある場合 脆弱性になるということが言えます。 データベースを使用しても仰るようにSQLインジェンクション等、脆弱性はあります。 しかしそれでもデータベースのインターフェースはあくまでも「WEBサービス」であり このインターフェース部分(具体的にはPHPならpg_connect,pg_fetch等)に対しての脆弱性を防げば データの機密性は守れる、ということが言えます。 つまり ログ形式の場合WEBサービスの脆弱性がログ形式のデータ流出に繋がりやすいのに対して データベースの場合WEBサービスの脆弱性がデータ流出に、「比較的」繋がりにくいということが言えます。

Intel_404
質問者

お礼

大変ご丁寧な回答ありがとうございました。 なるほど、そんな脆弱性が考えられますね。確かにログの場合、ログ自身は制限できないので見れる状態にあれば見れてしまうということですが、DBは見せる対象を選ぶためその分安全だというわけですね。やっと理解できました。ありがとうございました。 PS:ちなみに私のIDはntel_404ではなくIntel_404ですww

その他の回答 (3)

  • iekarapin
  • ベストアンサー率34% (9/26)
回答No.4

DBのコアコンピタンスを外部活用するため 速い、簡単、技術が共通かしている(SQL,Oracleももう一般技術) バグが少なくなっている、DB単体は常に進化している。 個別で作成していたら、かなわない

Intel_404
質問者

お礼

回答ありがとうございました。

  • 7marine
  • ベストアンサー率36% (59/160)
回答No.3

そのデータを同時に使用するアプリケーション(ロードバランシングを含む)が複数存在する場合は、どうしてもDBにしなければ対応できません。 あとデータに関する保守やパフォーマンスチューニングにコードを書く必要が無くなるので開発の生産性が向上します。 SQLインジェクション対策はDBプログラミングの基本です。 基本の出来ていないプログラマーがいること自体が問題ではないでしょうか?

Intel_404
質問者

お礼

回答ありがとうございました。 >SQLインジェクション対策はDBプログラミングの基本です。 基本の出来ていないプログラマーがいること自体が問題ではないでしょうか? それが最近ではできていなのですね。これが。プロが開発したアプリでもやはり脆弱性は存在するものですから。

  • haru1234
  • ベストアンサー率47% (22/46)
回答No.1

>WWW上から見れないディレクトリにログをためればいいのではないでしょうか? について、 結論から言うとその通りです。 実際私も自分の趣味でプログラムを作る分には、そういった方法でやっていますしそれで 何か弊害があるかというと特にはありません。 しかし仕事で、かつある程度の規模のサイトを複数人で開発する際にはデータベースを 使わないという選択肢は私としてはありえません。 なぜかと申しますと、ntel_404が仰った、ログ方式のデメリットは ・複数人で開発する時、データの仕様(区切り文字、何列目に何のデータを入れるか)等  全てのメンバーが把握していないとプログラムを開発できない。  また、一度決めた仕様を容易に変更することは出来ない。 ・ファイルが壊れる可能性がある。 ・データ量が増えたとき(40000件より上くらい)パフォーマンスを改善する手段が  プログラムを改善する以外に無い。 ・セキュリティ的に脆弱である。 等だと思います。 勿論この辺りの問題はプログラムを作りこめば解決は出来ます。 しかしこの辺りの問題は、商用クラスのプログラムではほとんど共通の問題です。 ならロジックとは別に、データを管理する仕組みを独立して提供しよう、ということで 開発されたのがデータベースです。 後、 >最近ではSQLインジェンクションなどの攻撃も目立ちDB関連による個人情報流失のニュースをよく目にします。 に関してはログ方式のほうが遥かに危険だということを認識しておいてください。

Intel_404
質問者

お礼

なるほど、やっと理解できました。データを別に管理し後の変更にも即急に対応できるようにするためにですね。 >>最近ではSQLインジェンクションなどの攻撃も目立ちDB関連による個人情報流失のニュースをよく目にします。 >に関してはログ方式のほうが遥かに危険だということを認識しておいてください。 ここが、ちょっと理解できません。どうしてログ形式だとはるかに危険なんでしょうか? よろしくお願いいたします。

関連するQ&A

  • SQLiteのデータベースについて

    PHP初心者です。以下のSQLiteより作成するデータベースについて教えてください。 $DB = sqlite_open('db1.db'); $sql="create table tables(id integer ,name,texts)"; $result=sqlite_query($db,$SQL); 上記、プログラムにより、同ディレクトリに、db1.dbが作成されますが、このデータベース情報はどのようにして、閲覧するのでしょうか(MS-ACCESS、SQLのように簡単に閲覧できないのか)。主キーやテーブルの名前またはフィールドの名前の変更、データ一覧閲覧などどのようにするのでしょうか。 環境は、Windows環境で、PHP4を使用しております。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • SQLインジェクションについて質問です

    よくSQLインジェクションの攻撃で、改竄されたWEBページからウイルスを仕込まれた。 等という話を耳にしますが、この攻撃でどうやって改竄するのですか? 私が知ってる範囲だと、この攻撃では入力フォームに必ず条件マッチするようなSQLを入れて 情報を取り出したり、DBの情報を書き換えたり、情報を消したりくらいしか出来ない気がするのですが・・ あと、SQLインジェクションの紹介でよく見る、ログイン画面で「' 1=1;--」みたいな入力は誰でも思いつくと思うのですが、DBの情報を書き換えたり消したりするのって そのDBのカラム名とかが分からないとできないですよね。 攻撃者はこれらを推測して行っているのですか。 それともカラム名とかを知り得る攻撃手法があるのでしょうか。 また、SQLインジェクションとは関係ないのですがXSSという攻撃手法もありますよね。 こっちはクッキー情報を盗まれるのが一番大きな被害とありますが クッキー情報を盗まれると具体的に何がまずいのでしょうか。 サーバー側でクッキーに個人の名前とかメアドとかを入れてる場合があるという事ですか?

  • IPログから個人情報が特定されることはあるのでしょうか?

    IPログから個人情報が特定されることはあるのでしょうか? ネットの匿名掲示板などに書き込んだ内容が風評被害を与えた等の理由で、IPログを調べられて、個人情報が流失することはあるのでしょうか? 匿名掲示板は、個人情報の登録をするものではなく、そのまま匿名で書き込めるものに限っての事なのですが。 また、個人情報が流失する場合の条件など分かりましたらお願いします。IPログだけで、個人情報が分かるとしたら、どのようなルートを経由しで流出するのでしょうか?(プロバイダの登録情報を参照するのか等)

  • わざわざお金をかけてdグルメを使うメリットは無いで

    dグルメは会員登録したらどんな情報が見れるのでしょうか? 食べログと同じ情報ですか? 「ジャンルで絞り込む場合は食べログ標準順となります」と書いてあります。 食べログで無料で見れるから わざわざお金をかけてdグルメを使うメリットは無いですよね?

  • 複数のデータベースを検索したい

    困っている内容ですが、 別々のサーバに構築されたAとBというデータベースがあります。 そのAとBにADOによる接続を行いますが、 AとBのテーブルを結合して情報を取得したいと考えています。 SQL文で言うと、 顧客情報はデータベースAに 顧客詳細はデータベースBに存在するテーブルであり 会員IDはそれぞれのテーブルにある SELECT * FROM 顧客詳細 INNER JOIN 顧客情報 ON 顧客情報.会員ID = 顧客詳細.会員ID のようなことがしたいのです。 テーブルを読み込む場合 '' ADO接続オブジェクト Dim adoCon As ADODB.Connection '' 新しいADOレコードセットオブジェクトを作成する Set rs = New ADODB.Recordset '' 読み取り専用でテーブルを開く rs.Open SQL, adoCon, adOpenForwardOnly, adLockReadOnly と書いていまして、adoConの部分が1つのADO接続オブジェクトしか設定できません。 どうにかして2つのデータベースをまたがって 結合できないものでしょうか? 環境は Win2000 + VB6 + SQLSERVER2000 です。 DB初心者なので、説明がうまくいかないと思いますが、 もしおわかりの方がいましたらよろしくお願いします。

  • ファイルシステムを模したデータベースの設計について

    Unix/Linux環境において、ファイルシステムを模したデータベースを設計しています。テーブルは大まかに、ユーザ情報、ユーザグループ情報そしてファイル情報の3つとなり、ユーザとグループの権限に応じて、ファイルの検索が出来るように作っています。PHPを通じて、検索結果を出力します。 今回ご相談したいのは、ファイル情報のテーブルです。ディレクトリの情報とファイルの情報を同じテーブルに入れようか、別なテーブルに分けた方がいいのか、悩んでいます。 テーブルを分けない場合だと、ファイル情報を検索する際、テーブルからファイル情報だけ抽出したテーブルと、同じテーブルからディレクトリ情報だけ抽出したテーブルをSQL関数でつなぐクエリを使えばいいのかなと考えています。 テーブルを分ける場合だと、ファイル情報テーブルとディレクトリ情報テーブルをSQL関数でつなげばいいのかなと思います。 どちらの方が効率がよい=ウェブサーバのリソースを抑えることができるのか、判断に苦しんでいます。相談に乗っていただけたら助かります。

  • SQL2005で同構成の2つのDBを1つにまとめたいと考えております。

    SQL2005で同構成の2つのDBを1つにまとめたいと考えております。 現在、定期的に決められた時間のLogをサンプリングして、 DBにためるような事をしております。 しかし、実行するたびにDBができてしまい一つに集約したいと 思ってますが、その際クエリとかでガッチャンコできるのでしょうか? もしくは、バックアップを取ってそれを1つのDBにがっちゃんこなんかできるのでしょうか? ご存知の方、ご教授いただければと思います。

  • スパイウエアで盗まれる個人情報の程度は?

    スパイウエアによって個人情報が流失するということがかなり広く言われるようになってきましたが、個人のパソコンの場合どの程度のことまで盗めるものなのでしょうか? また、スパイウエア対策ソフトを使った場合個人情報流失は完全に防げるものなのでしょうか?

  • sqlserverのログ

    DBに負荷をかけている処理、端末をつきとめようと思いログの解析をしているのですが、管理→SQL Serverログでは十分な情報がのっていません。どなたかもっと詳細なログを参照する方法をご存知でしょうか?よろしくお願いします。

  • 個人情報流失問題っていうけど、何がやばいの?

     YAHOOや企業が管理している個人情報の流失が最近問題になっていますよね?。  私もこりゃ問題だな~、とは思うんですが具体的にどういった悪用をされるんでしょうか?。  いろいろあるんでしょうが、個人情報が流失する時に発生する問題を教えてください。