矢沢久雄

●データベースを保護する機能

 データベースの保護とは,データが失われたり,データに矛盾が生じることを防ぐことです。この講座の第3回で説明した参照整合性も,データベースの保護機能の一つです。データベース管理システムが提供するデータベースの保護機能には,参照整合性以外にも,排他制御障害復旧,およびセキュリティ管理があります。 

●排他制御

 排他制御とは,同時に複数の利用者がデータベースを操作する場合に,データベースの内容に矛盾を生じさせないようにする機能です。排他制御は,操作の対象となっているレコードを一時的にロック(操作禁止)することで実現します。 

 たとえば,井上太郎の預金口座の残高として,100万円を記録したレコードAがあるとします。このレコードに早坂次郎が10万円を振り込み,矢沢三郎が20万円を引き出したとします。最終的なレコードAの内容は90万円になるはずですが,レコードのロックを行わないと80万円になってしまうのです。これは,明らかに矛盾しています(図1)

図1●同時に複数のユーザーが操作すると,データベースの内容に矛盾が生じる

 この矛盾を防ぐためには,早坂次郎がレコードAを読み出した時点でレコードAをロックし,矢沢三郎がレコードAを操作できないようにします。早坂次郎は,レコードAの内容を100万円+10万円=110万円に更新してからレコードAのロックを解除します。更新後のレコードを矢沢三郎が読み出して,110万円-20万円=90万円に更新します。これによって,正しい結果が得られます(図2)

図2●レコードをロックすることで,データの矛盾を防ぐ

●障害復旧

 障害復旧とは,データベースの内容に論理的な矛盾が生じてしまった場合や,データベースが物理的に損傷してしまった場合に,データベースの内容を障害発生前の状態に戻すことです。障害復旧のためには,データベースのコピー(退避データ)の作成と,データベースへの操作内容の履歴(ジャーナル・データ)の記録が必要になります。障害復旧の手法には,ロールバック処理ロールフォワード処理があります。 

 たとえば,排他制御の説明で示した井上太郎の預金口座の操作において,矢沢三郎が20万円を引き出してレコードAを更新するときに障害が発生したとしましょう。ロールバック処理の場合は,早坂次郎がレコードAに10万円を加えて更新したというジャーナル・データを参照して,それと逆の処理(レコードAから10万円引き出す)を行い,レコードAの内容をジャーナルデータ記録開始時点の100万円に戻します。 

 それに対して,ロールフォワード処理の場合は,レコードAの内容が100万円であったときに退避データを作成しておき,退避データに対してジャーナル・データに記録された操作(早坂次郎が10万円振り込んだ)を再度実行することで,レコードAの内容を障害発生直前の110万円に戻します(図3)

図3●ロールバック処理とロールフォワード処理

●セキュリティ管理

 データベースのセキュリティ管理には,パスワードの設定,アクセス権の設定,データ・ファイルの暗号化,およびログの記録があります。

 パスワードを設定することで,データベースを操作する利用者を識別できます。これによって,利用者ごとに異なるアクセス権(データベースの操作の可否)を設定できます。多くの利用者に参照させることを目的としたデータベースであっても,登録,更新,および削除は,一部の限られた利用者だけに許可することが一般的でしょう。

 データ・ファイルの暗号化は,データを暗号化してから記録し,パスワード登録されている利用者だけが解読して参照できるようにするものです。

 ログの記録は,データベースに対する操作内容をログファイルに記録しておき,障害が発生したら,ログファイルの内容を調べて不正な操作を特定するものです。

 次回はSQLについて解説します。