【アクセス管理.002】データベースセキュリティ①
佐藤@IT雑貨屋です。
私がアプリケーション開発していた時には、クライアントへインストールするアプリケーションが主流であり、データベースも社内サーバに置くものが大半でした。中には広域の事業所の業務システムという事で、インターネットVPNを介して社内のデータベースサーバにアクセスするものもありました。
しかし今ではWEBアプリケーションがメインであり、常にインターネット上に「晒されている」という事から、様々なリスクにさらされているという状況です。その事から近年では「ゼロ・トラスト」という事で、様々なサイバー攻撃を想定した対策を講じる必要があります。
こういった事から、データベースがもつセキュリティ機能を利用するだけでは、データを守り切れない事があります。データベースを守るためには、他のセキュリティプロトコルや暗号化と組み合わせた対策が必要になります。
◆データベース暗号化
データベースに格納されるデータ自体を暗号化します。これによりDBMS(DataBase Management System:データベース管理システム)が格納されているストレージなどが盗難されたとしてもデータを保護する事が出来ます。
しかしプログラムからアクセスされた場合には複合されてしまうので、暗号化されたデータが解読されてしまいます。SQLインジェクションなど、アプリケーションを中継した攻撃には対応できないので注意が必要です。
◆利用者認証
DBMSではログイン用のアカウントがあり、ユーザ毎に利用者認証を行います。そのユーザ毎にテーブルやビューなどにアクセス権限を設定する事が出来ます。表の一部のみにアクセス権限を設定したい時にはビューを利用し、ビューに対してユーザのアクセス権を設定します。
また、Webサーバ上のプログラムからアクセスが行われると、複数のユーザが同じDBMSアカウントでアクセスするために、利用者の詳細の記録が残せないという場合があります。そのため、Webサーバ側でアクセス制御を行う必要もあります。
◆ロール
DBMSアカウントには、ユーザだけでなくロール(役割)を設定し、ロール毎にアクセス制御を行う事が出来ます。ロールとは、役割が同じユーザをとりまとめたグループです。アクセス制御などをユーザ毎に個別に割り当てるのは手間がかかるので、ロールを用いてまとめた権限を割り当てたりします。このロールによるアクセス制御をロールベースアクセス制御といいます。
例えば"営業部"、"管理者"などと言った集合的なロールを作成し、アクセス権を一度に複数のユーザに割り当てる事も可能です。また"営業1課"等のロールを作成する事で、人事異動で役職が変わった時に、ロールに割り当てるユーザを変更する事で、アクセス権限などの変更は不要になります。
◆データベースの制約
関係データベースでは、複数のテーブルにデータを分割しますが、そのテーブル間にはリレーション(関連性)があります。そのリレーションを維持し、データの完全性を確保するために、テーブル間に制約をかけます。
最も重要な制約は、参照制約です。二つのテーブル間のリレーションの参照整合性を満たす為、外部キーを設定し、データの追加・削除に制限をかけます。例えば"顧客"、"担当部署"という二つのテーブルに、多対一のリレーションがある場合、参照制約として顧客(多数のレコードがある)テーブルを昨背うする時に、担当部署(一つのレコード)のレコードを参照して制約をかけます。つまり顧客テーブルには担当部署テーブルの主キーに無い行は追加できません。また担当部署テーブルは、顧客テーブルで外部キーを持っている行は削除できません。このようにして、二つのテーブルの参照整合性を保ちます。
その他、制約としては、一つの列に同じ値を入れる事ができない一意性制約、データに空欄(Null値)を許さない非ヌル制約があります。主キー制約は一意性制約と非ヌル性や有を合わせたものです。またデータ個々の値に制約を掛ける事をドメイン制約と呼び、そのうちデータの範囲などの形式を制限するものを検査制約(CHECK制約、形式制御)と言います。