📙

データベースを守るための基礎知識

に公開

データベースを守るための知識(基礎)

こんにちは!わいわわです!
データベースの勉強を進めています。
本日はデータベースを守るための知識について、まとめていきます!
トラブルやセキュリティといった面ですね!

物理的脅威

システムに問題を引き起こす行為の一つに物理的脅威があります。
先日のバックアップを取る大切さの話の中でも、物理的脅威には触れました。
https://zenn.dev/waiwawaiwai/articles/d93ce78d38afb3

具体的には
・地震や洪水、落雷などの自然災害
対策→耐震対策や遠隔地でのバックアップ、UPSや自家発電装置の設置

・不法侵入によって機器が盗まれる、壊される
対策→部屋の施錠や入室管理といった防犯対策

・老朽化によって故障する
対策→データのバックアップ、予備装置での冗長化

などがあげられます。

技術的脅威

技術的脅威はプログラムやネットワークを通じて行われる攻撃のことを指します。
不正アクセスコンピュータウイルスDoS攻撃盗聴などがあり、
プログラムの脆弱性を突くことによって狙われるケースが多くあります。

対応策として、

  • ウイルスソフトの導入
  • OSやソフトウェアのバージョンアップ
  • アクセス制御や認証の設定
  • データの暗号化
    などの対策を検討する必要があります。

技術的脅威の事例

1.不正アクセス
アクセス権限を持っていない人が不正に侵入すること

2.コンピューターウイルス
何かしらの被害を及ぼすように悪意を持って作られたプログラム
情報の盗難やコンピュータの誤作動、サーバが乗っ取られる可能性がある

3.DoS攻撃
大量にデータを送ることによってサーバに負荷をかける攻撃のこと

4.盗聴
情報漏洩につながる恐れがある

人的脅威

人間によるミスや不正行為によって損失を引き起こす要因を人的脅威と呼びます。
具体的には誤操作、紛失・置き忘れ、ソーシャルエンジニアリングなどがあります。
組織においてはとくに人的脅威が多く、防ぎにくい脅威でもあります。
各個人が防止することや、組織においては情報セキュリティに対してのルールを策定したり
教育を徹底したりすることが必要になってきます。

誤操作や紛失、置き忘れはイメージしやすいかと思いますが、
ソーシャルエンジニアリングとは、
人の心理や行動の隙を狙って重要な情報を入手する手段のことをいいます。

例を挙げると、電話で関係者になりすましてパスワードを聞き出したり、
緊急事態を装って相手に考える余裕を与えずに通常では得られない情報を得たりするといった手口があります。

エラーログ

データベースで発生したエラーの履歴を見る手段としてエラーログを確認する方法があります。
エラーログはエラー文が記録されたファイルであり、
データベースでエラーが起こるたびに新しく追加されていくため、時系列でエラーを確認することができます。

エラーログに出力される情報の例としては、エラーが発生した日付、エラーコード、エラーメッセージ、エラーレベルなどがあります。

エラーレベル

エラーレベル...エラーの緊急度のレベル
エラーによっても重大な異常と今すぐ対応する必要はないですが、注意すべき情報などがあります。
データベース管理システムによっては、これらを区別できるように
それぞれのエラーにラベルがつけられているというイメージです。

エラーの種類

SQLの文法エラー
データベースで実行したSQLに打ち間違いがあるとエラーとなったり、
存在しないテーブル名やカラム名を指定した場合にエラーになります。

リソース不足
メモリやディスク容量が足りないと、期待した処理がうまく行われずにエラーとなってしまいます。

その他にも接続ができなかったり、デッドロックが起きたり、タイムアウトしたりなどさまざまです。
デッドロックに関しては以前こちらでまとめました!
https://zenn.dev/waiwawaiwai/articles/a35cb682629757

スロークエリについて

実行に時間がかかっているSQL文のことをスロークエリと呼びます。
スロークエリは、SQLを実行して結果が返ってくるまでの時間を測ることで特定することができます。
しかし、1つ1つ確認を行うのは大変なためデータベース管理システムによっては一覧表示などの機能があります。

スロークエリが引き起こす問題としては、
webサイトでページの表示が遅くなる、
サーバに負荷がかかるなどがあげられます。

スロークエリの最適化

  • SQLの文をクエリを修正して取得の仕方を変える
  • テーブルにインデックスを使う
    ことが有効です。

スロークエリを取得する際は多くの場合、自身で「何秒以上かかっているクエリか」を指定して抽出できます。
たくさん時間がかかっているものから最適化していくと効率よくチューニングできます。

インデックスとは

イメージとして近いのは本の索引です。
索引を参照することで目的のページに早く辿り着くことができます。
データベースの場合だと、検索条件に頻繁に用いるカラムのインデックスを作成しておくことで、データ取得の性能を上げられるのです。

インデックスのデメリット

インデックスにもデメリットがあります。
インデックスを適用する場合、データの編集を行なった際にインデックスの更新処理も行われるため、データ編集の速度が落ちてしまいます。
また、データとは別にインデックスの領域が必要になるため、
ディスク容量を消費するという点もあげられます。

スケールアップ・スケールアウト

システムの処理能力を上げる手順として

スケールアップ
コンピュータのメモリやディスク、CPUを増設したり、性能の良いものに取り替えること
特定のコンピュータ内での処理が頻繁に行われる場合に有効

スケールアウト
コンピュータの数を増やして処理を分散させることで処理能力を向上させること
特に単純な処理を複数台で分散するときに有効
複数台あるため、1台が故障してもシステムをやめずに済むというメリットもある

以上の2つがあります。
使い分けることが大切ですね!

レプリケーション

スケールアウトの主な実現方法として、このレプリケーションがあります。
もととなるデータベースから同じ内容のデータベースを複製してデータを同期して使うことを指します。。

例としては、主となるデータベース(マスター)を作成と、読み込み専用のデータベースを作成。
データの更新についてはマスターのデータベースに対して行い、
変更内容が読み込み専用のレプリカに反映されるというイメージです。

データの読み込みが主となるデータベースではこのような構成にすることで、
読み込み時の負荷を分散させることができ、パフォーマンスを向上させることが可能です。

SQLインジェクション

情報流出やページの改ざんが事件になることがありますが、
代表的な原因としてSQLインジェクションがあげられます。
これは攻撃方法で、ユーザーが任意に入力できる項目に、攻撃者が不正なSQL文を入力する攻撃です。
これを行うと本来閲覧できないはずの情報の抜き取りや変更ができてしまう脆弱性です。

SQLインジェクションの対策

一般的な対策は入力値のエスケープ処理を行うことです。
ユーザーが自由に入力できる値をそのままSQLに利用せず、
文字列として扱うような形に変換してからSQLに艇起用します。

他にもWAF(Web Application Firewall)を導入して不正なアクセスを遮断することで、
SQLインジェクションのリスクを抑えることができます。

所感

今回は、データベース運用時の脅威やそこから守るための基礎知識について学習しました。
知っている知識もあればSQLインジェクションのように知らない知識もあり、勉強になりました。
いま学習しているSQLの基礎参考書も終わりが近く、浅く広くですが全容が見えてきていますね!
引き続き頑張ります!

Discussion