検索

アクセス権限とロール機能


アクセス権限とは

昨今、情報漏えいや不正アクセスといった問題が取りざたされていますが、顧客の個人情報や売上げ情報が格納されているテーブルに無制限でアクセスできたり、不慣れなユーザーが誤ってデータを消去してしまう状況を想像するだけで、適切なアクセス権限の設定がいかに大切かご理解いただけると思います。

Teradataデータベースでは、さまざまなアクセス権限によってデータベースのオブジェクトの作成、削除、表示、変更そして実行などのアクティビティを制御します。代表的なアクセス権限には SELECT、DELETE、UPDATE権限や、オブジェクトを作成する際に必要となる CREATE関連の権限、またオブジェクトを削除する際に必要となる DROP関連の権限などがあります(表1)。

Teradataデータベースはユーザーの SQL要求を受け取ると、その内容を検証し、アクセス対象のオブジェクトに対してユーザーが適切な権限を所有しているかを確認します。もし、SQL要求を実行する上で必要な権限がユーザーにない場合、その要求はアボートされます。

アクセス権限の割り当て方法

Teradataデータベースのアクセス権限は、所有者権限(暗黙的権限)、自動権限、そして明示権限の 3つの方法によって割り当てられます。

1.所有者権限(暗黙的権限)

所有者権限を理解するには、データベースの論理的な階層構造を知る必要があります。Teradataデータベースは DBC(*1)というユーザーを頂点にした階層構造になっており、データベースやユーザーには親子関係が存在します(図1)。

あるデータベースやユーザーの領域にテーブルなどのオブジェクトが作成されると、そのデータベースやユーザーは該当オブジェクトの直接の所有者になります。そして、直接の所有者と階層内で上位に位置する間接的な所有者には所有者権限が与えられます。この所有者権限は、所有しているオブジェクトに対するアクセス権を、自分や他のデータベースやユーザーに付与する暗黙的な権限であり、これを取り消すことはできません。例えば、自分が所有するテーブルのアクセス権限を任意で取り消した場合、そのテーブルにはアクセスできなくなりますが、所有者権限によっていつでもアクセス権限を明示的に取り戻すことができます。

所有者権限は GIVE文を使うことで、領域そのものを他の所有者に移行することによって譲渡できます。ただし、GIVE文で譲渡できるのは、データベースとユーザーだけであり、テーブルなどのその他のオブジェクト単位での譲渡はできません。

2.自動権限

自動権限は、CREATE文を使ってデータベースやユーザーやテーブルなどのオブジェクトを作成した作成者、そして新たに作成されたデータベースやユーザーに自動的に与えられる権限です。自分が所有している領域以外にも新しいデータベースやユーザーを定義することができるため、作成者が必ずしも所有者であるとは限りません。領域の所有者は、自分の下に新規で作成されたデータベースやユーザーの所有者になります。自動権限は、アクセス権限を管理する "DBC.AccessRights" というシステム・テーブル(*2) に記録され、以下のような REVOKE文を使って取り消すことができます。取り消された権限は、"DBC.AccessRights" テーブルから削除されます。

REVOKE SELECT on TableA from UserA; (ユーザーA からテーブルA の SELECT権限を取り消す)

3.明示権限

明示権限とは、暗黙的に与えられたり自動的に付与される権限と異なり、以下のような GRANT文を使って後から任意に設定するアクセス権限です。

GRANT SELECT on DatabaseA to UserA; (データベースA に対する SELECT権限をユーザーA に付与する)

ただし、GRANT文を実行できるのは、オブジェクトの所有者か、オブジェクトに対する GRANT権限を持つユーザーでなければなりません。また、明示権限も自動権限と同様に "DBC.AccessRights" テーブルに記録され、REVOKE文を使うことで取り消すことができます。

ロール機能

前述のように、自動的あるいは明示的に付与されたアクセス権限は、"DBC.AccesRights" テーブルに格納されますが、オブジェクトの数とユーザーの数が増えれば増えるほどこのテーブルのサイズは増大し、アクセスにも影響を与える可能性があります。このような場合、ロール機能を利用することで、システム・テーブルのサイズを小さくすると同時に、権限情報の管理を簡素化することができます(図2)。

ロール機能を使わない場合、各オブジェクトの権限を各ユーザーに 1つずつ割り当てる必要があります。ロールとは、このように個別のユーザーに各権限を設定するのではなく、職務に応じたアクセス権限の集合をロール(役割)として定義し、そのロールを個々のユーザーに割り当てる方法です(図3)。

企業の中には部門や役職に応じてさまざまな役割が存在します。そこで、データベース管理者用のロールや経理部門用のロールなどを定義し、職務に応じたロールを各ユーザーに割り当てます。

このようにアクセス権限をロールによって管理することで、システム・テーブルのサイズを縮小するだけでなく、1回の操作で複数の権限の付与や取り消しが可能になるために、管理も簡素化されます。また、権限を個人レベルでなく役割単位で管理することで、組織変更や異動にも柔軟に対応でき、アクセス権限の設定の漏れや誤りが発生するリスクを低減できます。

まとめ

Teradataデータベースに格納されている大切なデータを最大限に活用しながら、不正アクセスや不慮の事故を防ぐためにも、適切な人が適切な情報にアクセスできるように権限を設定することが重要です。Teradataデータベースのアクセス権限は、SELECT や DELETE をはじめ豊富に用意されており、これらはオブジェクトの所有者権限、オブジェクトの作成に伴う自動権限、そして明示的権限によってユーザーに割り当てられます。自動的あるいは明示的に付与されたアクセス権限は、システム・テーブル "DBC.AccessRights" に格納されますが、オブジェクトやユーザー数が増えるに従って、このテーブルのサイズは増大します。そこで、ロール機能を用いることで、このテーブルのサイズを抑制すると同時に、企業における役割に応じてアクセス権限を制御し、管理や運用を簡素化することが可能になります。

  • *1: DBC とは Teradataデータベースをインストールした時点で存在する唯一のユーザーであり、システム内の他のデータベースやユーザーをすべて所有します。

  • *2: システム・テーブルとは、Teradataデータベースに関するさまざまな管理情報や、ユーザーのデータベースに関する定義や制御情報などを管理するためにシステムが保持するテーブルです。


eventbanner.png