PSQL Programmer's Guide (v11)

データベース セキュリティの管理 (リレーショナル インターフェイス)

Pervasive PSQL のセキュリティ オプションを使用すると、特定のユーザーに対し、データ列の操作を制限することができます。これらの制限は、ユーザーがテーブルの特定の列しか見えないようにすることから、すべての列を見ることができるが更新できないようにすることまで、さまざまな範囲で行うことができます。Pervasive PSQL は、データベース許可について、オペレーティング システムのファイルおよびディレクトリ権限を想定しません。デフォルトで、Pervasive PSQL を使用してデータベースにアクセスするすべてのユーザーは、データに読み書きする完全なアクセス権を持ちます。このアクセスを制限し、Pervasive PSQL を使用してデータベースを不当な更新またはアクセスから保護するために、データベース セキュリティを有効にし、定義する必要があります

Pervasive PSQL のセキュリティ ステートメントにより、データベースへのアクセスを制限する次の動作を行うことができます。

データベース権限の理解

46 は、ユーザーおよびユーザー グループに付与することができる権限を示しています。

表 46 データベース権
アクセス権
説明
Login
ユーザーがデータベースにログインすることを許可します。ユーザーとパスワードを作成するときにこのアクセス権を割り当てます。ただし、Login 権はユーザーがデータにアクセスすることは許可しません。ユーザーがデータにアクセスできるようにするには、ほかのアクセス権を割り当てる必要があります。ユーザー グループに Login 権を割り当てることはできません。
Create Table
ユーザーが新規テーブル定義を作成できるようにします。ユーザーはテーブル作成時に自動的にテーブルへのフル アクセス権を持ちますが、Master ユーザーは後でテーブルの読み取り、書き込み、変更のアクセス権を取り消すことができます。Create Table 権はグローバル権とも呼ばれます。このアクセス権がデータ辞書全体にも適用されるからです。
Select
ユーザーがテーブルの情報を照会することを許可します。Select 権は特定の列にもテーブル全体にも与えることができます。
Update
ユーザーに指定した列またはテーブルの情報を更新するアクセス権を与えます。Update 権は特定の列にもテーブル全体にも与えることができます。
Insert
ユーザーがテーブルに新しい行を追加できるようにします。Insert 権はテーブル レベルでのみ付与することができます。
Delete
ユーザーがテーブルから情報を削除できるようにします。Delete 権はテーブル レベルでのみ付与することができます。
Alter
ユーザーがテーブル定義を変更できるようにします。Alter 権はテーブル レベルでのみ付与することができます。
References
ユーザーがテーブルを参照する外部キー参照を作成できるようにします。References 権は、参照制約を定義するのに必要です。
All
Select、Update、Insert、Delete、Alter および References 権を含みます。

あるタイプのアクセス権を、データベース全体または特定のデータベース要素に割り当てることができます。たとえば、Update 権をユーザーまたはユーザー グループに割り当てた場合、これを一定のテーブルまたはテーブル内の列に制限することができます。それに反して、Create Table 権をユーザーまたはユーザー グループに割り当てた場合、そのユーザーまたはユーザー グループはデータベース全体に Create Table 権を持ちます。単一のテーブルまたは列に対して Create Table 権を適用することはできません。

Create Table と Login 権はデータベース全体に適用される一方、そのほかのアクセス権はすべてテーブルに適用されます。さらに、Select および Update 権をテーブル内の個々の列に適用することができます。

データベース セキュリティの確立

次の 8 つの手順はデータベースのセキュリティを確立する一般的な方法を表します。

  1. セキュリティを確立するデータベースにログインします。
    データベースへのログインの詳細については、『Pervasive PSQL User's Guide』を参照してください。
  2. マスター ユーザーを作成し、SET SECURITY ステートメントを使用してマスター パスワードを指定し、データベースのセキュリティを有効にします。
    マスターとしてセキュリティを有効にすると、マスター ユーザーの名前は Master(大文字小文字を区別)となり、セキュリティを有効にしたときに指定したパスワードがマスター パスワード(大文字小文字を区別)となります。詳細については、セキュリティの有効化を参照してください。
  3. 任意:PUBLIC グループに最低限のアクセス権のセットを定義します。
    すべてのユーザーは自動的に PUBLIC グループに所属します。詳細については、PUBLIC グループにアクセス権を付与するを参照してください。
  4. 任意:CREATE GROUP ステートメントを使用してユーザー グループを作成します。
    システムで必要な数のグループを作成することができます。ただし、1 人のユーザーは PUBLIC 以外は 1 つのグループにしか所属できません。詳細については、ユーザー グループの作成を参照してください。
  5. 任意:GRANT CREATETAB および GRANT(アクセス権)ステートメントを使用して、各ユーザー グループへのアクセス権を付与します。詳細については、ユーザー グループへのアクセス権の付与を参照してください。
  6. GRANT LOGIN ステートメントを使用してユーザー名とパスワードを指定し、ユーザーに Login 権を付与します。選択により、各ユーザーをユーザー グループに割り当てることもできます。詳細については、ユーザーの作成を参照してください。
  7. GRANT CREATETAB と GRANT(アクセス権)ステートメントを使用して、ユーザー グループのメンバーでない作成済みユーザーにアクセス権を与えます。詳細については、ユーザーへのアクセス権の付与を参照してください。
  8. 任意:不当な Btrieve アクセスからファイルを保護するために、データベースをバウンド データベースにします。バウンド データベースの詳細については、データベース権限の理解を参照してください。

セキュリティの有効化

セキュリティを有効にするには SET SECURITY ステートメントを使用できます。それに応え、Pervasive PSQL はマスター ユーザーを作成します。マスター ユーザーはデータベースに対し完全な読み書きのアクセス権を持ちます。SET SECURITY ステートメントで指定したパスワードはデータベースのマスター パスワードになります。

次の例はデータベースのセキュリティを有効にし、マスター ユーザーのパスワードに Secure を指定します。

SET SECURITY = Secure; 

パスワードでは大文字小文字が区別されます。

セキュリティを有効にすると、Pervasive PSQL は X$User と X$Rights というシステム テーブルを作成します。セキュリティを有効にすると、マスター ユーザーを除くすべてのユーザーは、明示的にほかのユーザーを作成してログイン権を与えない限り、データベースにアクセスできません。

ユーザー グループとユーザーの作成

セキュリティを有効にした後、データベースは 1 人のユーザー(Master)と 1 つのユーザー グループ(PUBLIC)を持ちます。ほかのユーザーにデータベースへのアクセスを提供するには、マスター ユーザーとしてデータベースにログインし、名前とパスワードを使用してユーザーを作成します。またユーザーをユーザー グループに組織することもできます。

Pervasive PSQL はユーザー名の大文字小文字を区別します。したがって、マスター ユーザーとしてログインする場合、ユーザー名を Master と指定する必要があります。

ユーザー グループの作成

セキュリティ管理を単純化するために、ユーザーをユーザー グループに組織することができます。システムで必要な数のユーザー グループを作成することができます。ただし、1 人のユーザーは、PUBLIC に加えて 1 つのグループにしか所属できません。ユーザーは、いったん追加されたグループに所属すると、グループのアクセス権を継承します。そのユーザーに個別のアクセス権を与えることはできません。グループ内のユーザーのアクセス権は、グループ全体に定義されたアクセス権と異なるものにすることはできません。ユーザーに固有のアクセス権を与えるには、そのユーザーのためだけの特別なグループを作成します。

ユーザー グループを作成するには、CREATE GROUP ステートメントを使用します。

CREATE GROUP Accounting; 

一度に複数のユーザー グループを作成することもできます。

CREATE GROUP Accounting, Registrar, Payroll; 

ユーザー グループ名は大文字と小文字を区別し、30 文字以内で、データベースに対して一意である必要があります。ユーザー グループ名を付ける規則の詳細については、『SQL Engine Reference』を参照してください。

ユーザーの作成

データベースにユーザーを作成するとき、Pervasive PSQL は、対応するユーザー名とパスワードをデータベースのセキュリティ テーブルに記録します。ユーザーを作成するには GRANT LOGIN TO ステートメントを使用します。次の例は、ユーザー Cathy を作成し、パスワードとして Passwd を割り当てます。

GRANT LOGIN TO Cathy:Passwd; 


メモ

Pervasive PSQL はパスワードを暗号化形式で格納します。したがって、X$User テーブルに照会してユーザーのパスワードを表示することはできません。


ユーザー作成時にユーザーをユーザー グループに割り当てることもできます。たとえば、ユーザー Cathy を Accounting グループに割り当てるには次のステートメントを使用します。

GRANT LOGIN TO Cathy :Passwd
   IN GROUP Accounting; 

ユーザー名とパスワードは大文字と小文字を区別します。ユーザー名とパスワードに対して許容される長さと文字については、『Advanced Operations Guide』の識別子の種類別の制限を参照してください。

アクセス権の付与

このセクションでは、ユーザー グループと個々のユーザーにアクセス権を与える方法を説明します。

PUBLIC グループにアクセス権を付与する

すべてのユーザーは自動的に PUBLIC グループに所属します。PUBLIC グループは特別なユーザー グループで、特定のデータベースのすべてのユーザーの最低限のアクセス権のセットを定義するのに使用します。PUBLIC グループに割り当てられたユーザーより少ないアクセス権を持つユーザーはいません。PUBLIC グループからユーザーを削除することはできません。PUBLIC グループに与えられているアクセス権をユーザーから取り消すことはできません。

デフォルトで、PUBLIC グループにはアクセス権が何もありません。PUBLIC グループのアクセス権を変更するには、GRANT(アクセス権)ステートメントを使用します。たとえば、次のステートメントはサンプル データベースのすべてのユーザーに、データベース内の Department、Course、Class テーブルを照会することを許可します。

GRANT SELECT ON Department, Course, Class TO PUBLIC; 

PUBLIC グループにアクセス権を与えたら、別のグループを作成してより高いレベルのアクセス権を定義することができます。ユーザーをグループに所属させないことによって、個々のユーザーに、ほかのユーザーまたはユーザー グループとは異なるアクセス権を追加することもできます。

ユーザー グループへのアクセス権の付与

ユーザー グループにアクセス権を割り当て、そのグループにユーザー名とパスワードを追加することができます。こうすると、各ユーザーのアクセス権を個々に割り当てる手間を省くことができます。また、グループにセキュリティ権を割り当てた場合、セキュリティ管理はより簡単になります。グループ全体に 1 度に新しいアクセス権を与えたり既存のアクセス権を取り消したりすることにより、多数のユーザーのアクセス権を変更することができるからです。

ユーザー グループにアクセス権を与えるには、GRANT(アクセス権)ステートメントを使用します。たとえば、次のステートメントは、Accounting グループのすべてのユーザーが、サンプル データベースの Billing テーブルの定義を変更することを許可します。

GRANT ALTER ON Billing TO Accounting; 


メモ

Alter 権を与えることは、Select、Update、Insert、Delete 権を暗黙的に与えることを忘れないでください。


ユーザーへのアクセス権の付与

ユーザーを作成すると、そのユーザーはデータベースにログインできます。ただし、そのユーザーは、アクセス権を持つユーザー グループに所属させるか、そのユーザーにアクセス権を与えるかのいずれかをしなければ、データにアクセスすることはできません。

ユーザーにアクセス権を与えるには、GRANT(アクセス権)ステートメントを使用します。次の例は、ユーザー John に、サンプル データベースの Billing テーブルに行を挿入することを許可します。

GRANT INSERT ON Billing
   TO John; 


メモ

Insert 権を与えることは、Select、Update、Delete 権を暗黙的に与えることになります。


ユーザーとユーザーグループの削除

ユーザーを削除するには、REVOKE LOGIN ステートメントを使用します。

REVOKE LOGIN FROM Bill; 

このステートメントは、データ辞書からユーザー Bill を削除します。ユーザーを削除すると、データベースのセキュリティを無効にしない限り、そのユーザーはデータベースにアクセスできません。

次の例のように、複数のユーザーを一度に削除することもできます。

REVOKE LOGIN FROM Bill, Cathy, Susan; 

ユーザー グループを削除するには、次の手順に従います。

  1. 次の例のように、グループからすべてのユーザーを削除します。
    REVOKE LOGIN FROM Cathy, John, Susan; 
    
  2. グループを削除するには、DROP GROUP ステートメントを使用します。次の例ではグループ Accounting が削除されます。
    DROP GROUP Accounting; 
    

アクセス権の取り消し

ユーザーのアクセス権を取り消すには、REVOKE ステートメントを使用します。次の例は、サンプル データベースの Billing テーブルから、ユーザー Ron の Select 権を取り消します。

REVOKE SELECT
   ON Billing
   FROM Ron; 

セキュリティの無効化

データベースのセキュリティを無効にするには、次の手順を行います。

  1. マスター ユーザーとしてデータベースにログインします。
  2. 次のように NULL キーワードを指定し、SET SECURITY ステートメントを発行します。
    SET SECURITY = NULL; 
    

データベースのセキュリティを無効にすると、Pervasive PSQL はデータベースからシステム テーブルの X$User と X$Rights を削除し、関連する DDF ファイルも削除します。


メモ

USER.DDF と RIGHTS.DDF データ辞書ファイルを単純に削除するだけではセキュリティを無効にすることはできません。これらを削除してデータベースにアクセスを試みると、Pervasive PSQL はエラーを返してデータベースへのアクセスを拒否します。


データベース セキュリティに関する情報の取得

データベース セキュリティを設定すると、Pervasive PSQL はシステム テーブル X$User と X$Rights を作成します。システム テーブルはデータベースの一部であるため、適切なアクセス権があれば、それらにクエリを実行できます。

各システム テーブルの内容をすべて参照する場合は、『SQL Engine Reference』のシステム テーブルを参照してください。


サンプル データベースの参照整合性 (リレーショナル インターフェイス)

並行制御 (リレーショナル インターフェイス)