【アクセス管理.003】データベースセキュリティ②
佐藤@IT雑貨屋です。
データベースに関連する事を続けます。
ここで紹介する事は、MS-SQLなどデータベースソフトウェアに基本的に具備されている機能です。この内容を参考として、実際にデータベースを操作してみれば、より理解が深まるとおもいます。
◆ビュー
ビュー(VIEW)は仮想的な表です。データベースに作成された実際の表とは異なり、SQL分からの問い合わせがある度に、実際の表や他のビューに問い合わせを行い、その応答結果を基にビューを作成します。
このビューを作成するのは、主に以下の目的です。
①複雑なSQL文を何度も記述する必要がない
複数の表を結合する処理や、集約関数などで複雑なSQL文を書く必要がある場合には、ビューを作成しておく事で効率化できます。何度も同じ処理を繰り返すとき、一度ビューを登録しておけば、簡単なSELECT文で呼び出す事ができます。
ビューは常に最新のデータを基に出力さえるので、データの整合性も守られやすくなります。
②セキュリティを確保する
データベースには顧客の個人情報など、公開を限定したい部分がある場合があります。こういった場合には、公表しても差し支えの無い情報だけを出力し、それ以外は隠しすとうう目的でビューを使用する事ができます。
表とビューにアクセス制御をかけることによって、参照できるユーザーを特定し、情報漏洩を防ぐ事もできます。
◆GRANT文
データベースに作成される表やビューなどは、全ての人に公開する場合もありますが、アクセス制御して特定のユーザのみに公開する場合もあります。その際にデータベースのアクセス権限を設定するSQL文がGRANT文です。
GRANT文で設定する対象は、表やビュー、ドメイン(定義域)、ロールなどのデータベースオブジェクトです。GRANT文では、特定のデータベースオブジェクトに足して、特定の動作権限を許可するユーザを設定します。設定する権限には、SELECT文(表示)、INSERT文(レコード追加)、UPDATE文(レコード更新)、DELETE文(レコード削除)、REFERNCES(レコード参照)、USAGE(利用)があります。ユーザを指定する場合には、ユーザ名だけでなくロール(役割)も指定する事が出来ます。
◆トランザクション管理
トランザクションとは、一連の処理単位の事をいいます。例えば銀行の処理では、Aさんの口座からBさんの口座に振り込みを行う場合、次の様な一連の処理が発生します。
1.Aさんの口座の残高を減らす
2.Bさんの口座の残高を増やす
これは2つの処理ですが、分割する事が出来ないので1つのトランザクションと呼んでいます。このトランザクションを確実に処理するために、排他制御や障害回復を行います。
①排他制御
二つのトランザクションを同時に実行し、同じデータを更新するとデータに矛盾が発生する事があります。それを防ぐ為には排他制御を行い、一度に一つのトランザクションしかデータ更新が行えない様にします。その為の具体的な方法にロックがあります。これはデータベースもしくはその中のレコード単位等にロックをかけて処理を行い、処理が終了したらロックを解除するというものです。
ただしこの時、複数のトランザクションが複数のデータを参照する場合、ロックを掛けながら互いに使用可能(ロック解除)を待ち続ける状態が発せする場合があり、それをデッドロックと呼んでいます。
排他制御を行う場合には、このデッドロックが起きないように、複数のトランザクションにおいて、データの呼び出し順序を同じにする方法などを取る必要があります。
②障害回復
データベース障害には、大きく分けて次の3つがあります。
・トランザクション障害
デッドロックのようなトランザクション関係で不具合が起きる障害です。トランザクション障害ではDBMSは正常に動作している事から、データの不具合が無いためにロールバック命令などを実行する事で対処可能です。
・ソフトウェア障害
ソフトウェアの実行中止などにより、DBMSのデータに不具合が起きる障害です。
・ハードウェア障害
ハードディスクの呼称などでデータが破損する様な障害です。バックアップデータを用いて復旧や、サーバの冗長化などで対策する事もできます。
ソフトウェア障害時のデータの復旧や、ハードウェア障害時のバックアップ後に更新されたデータでは、データベースのログファイルを利用して障害回復処理を行います。