NIS+ テーブルに対するアクセス権を指定する方法には、次の 3 通りあります。
「テーブル」全体を対象にアクセス権を指定する
「エントリ」(行) 単位でアクセス権を指定する
「列」単位でアクセス権を指定する
列とエントリ (行) が交差する部分をフィールドといいます。データ値はすべてこの交差領域、つまりフィールドに入力します。
列とエントリレベルのアクセス権を持っていると、テーブルレベルのアクセス権の制限があっても個々の行と列にアクセスできますが、テーブル全体へのアクセス権以上に列とエントリレベルの権限を制限することはできません。
「テーブル」。テーブルレベルは基本的なレベルです。テーブルレベルに付与されたアクセス権は、列ごとまたはエントリごとに特に変更された場合を除き、テーブル内のすべての部分に適用されます。テーブルレベルの権限は最も厳格であるべきです。
承認クラスは連結しているということに注意してください。上位クラスは、下位クラスに割り当てられた権利を取得していることになります。アクセス権の連鎖を参照してください。
「列」。列レベルの権限を持っていると、列ごとに追加アクセス権を持つことになります。たとえば、その他クラスと未認証クラスにテーブルレベルの権限が何も付与されていなかったとします。この場合、この 2 つのクラスはテーブル内のデータに対して、読み取り権、変更権、作成権、削除権を持ちません。列レベルの権限を持てば、テーブルレベルの権限の制限を超えて、その他クラスのメンバーであっても特定の列のデータを読み取ることができます。
一方、所有者クラスとグループクラスにテーブル全体の読み取り権が付与されている場合、列レベルの権限を使ってグループクラスの列の読み取り権を妨げることはできません。列のグループはテーブルのグループやエントリのグループと同じにはなりません。
「エントリ (行)」。エントリレベルの権限があれば、行ごとに追加アクセス権を持つことになります。たとえば、個々のユーザーに指定したエントリに限って変更する権限を与えることができるのです。
エントリのグループはテーブルのグループとは同じである必要はなく、別のグループにできます。そうすることによって、特定のグループのメンバーに、他のグループに属するエントリに影響を与えないで、あるエントリのセットにアクセスする権限を付与できます。
列またはエントリレベルのアクセス権は、追加アクセスを次の 2 つの方法で提供できます。1 つは権限を持つ主体を増やす方法で、もう 1 つは同じ主体に権限を追加する方法です。もちろん、これらを組み合わせることも可能です。以下にその例を示します。
テーブルオブジェクトが、そのテーブルの所有者に対して読み取り権を与えたとします。
表 15–1 テーブル、列、エントリの例 1
|
未認証 |
所有者 |
グループ |
その他 |
---|---|---|---|---|
テーブルのアクセス権 |
---- |
r--- |
---- |
---- |
このことは、テーブルの所有者だけがテーブル全体の内容を読み取れることを意味します。所有者でない主体は、アクセスできません。テーブルのエントリ 2 にグループクラスに対して読み取り権を与えることができます。
表 15–2 テーブル、列、エントリの例 2
|
未認証 |
所有者 |
グループ |
その他 |
---|---|---|---|---|
テーブルのアクセス権 |
---- |
r--- |
---- |
---- |
エントリ 2 のアクセス権 |
---- |
---- |
r--- |
---- |
テーブルの内容をすべて読み取れるのは所有者だけですが、このテーブルのグループのメンバーであれば、この特定エントリの内容を読み取ることができます。次に、特定の列がその他クラスに読み取り権を与えたとします。
表 15–3 テーブル、列、エントリの例 3
|
未認証 |
所有者 |
グループ |
その他 |
---|---|---|---|---|
テーブルのアクセス権 |
---- |
r--- |
---- |
---- |
エントリ 2 のアクセス権 |
---- |
---- |
r--- |
---- |
列 1 のアクセス権 |
---- |
---- |
---- |
r--- |
その他クラスのメンバーは例 1 のすべてのエントリを読み取ることができます。グループクラスのメンバーは、(その他クラスに属しているので) 例 1 のすべてとエントリ 2 の全列を読み取ることができます。*NP* になっているセルは、「グループ」、「その他」いずれのクラスも読み取りができません (どちらにもアクセス権がない)。
表 15–4 テーブル、列、エントリの例 4
|
列 1 |
列 2 |
列 2 |
---|---|---|---|
エントリ 1 |
読み取り |
*NP* |
*NP* |
エントリ 2 |
読み取り |
読み取り |
読み取り |
エントリ 3 |
読み取り |
*NP* |
*NP* |
エントリ 4 |
読み取り |
*NP* |
*NP* |
エントリ 5 |
読み取り |
*NP* |
*NP* |
この節では 4 つの権限 (読み取り、作成、変更、削除) が 4 つのアクセスレベル (ディレクトリ、テーブル、列、エントリ) とどのようにかかわるのかを説明します。
種々の権限とレベルに関係した機能を次の表 15–5 にまとめます。
表 15–5 アクセス権、アクセスレベル、およびその機能
|
ディレクトリ |
テーブル |
列 |
エントリ |
---|---|---|---|---|
読み取り |
ディレクトリ内容のリスト |
テーブル内容の読み取り |
列内容の読み取り |
エントリ (行) 内容の読み取り |
作成 |
新規ディレクトリまたはテーブルオブジェクトの作成 |
新規エントリ (行) の追加 |
列に新規のデータを入力 |
エントリ (行) に新規のデータを入力 |
変更 |
オブジェクトの移動とオブジェクト名の変更 |
テーブル内の任意のデータを変更 |
列内のデータを変更 |
エントリ (行) 内のデータを変更 |
削除 |
テーブル等のディレクトリオブジェクトの削除 |
エントリ (行) の削除 |
列内のデータの削除 |
エントリ (行) 内のデータの削除 |
「ディレクトリ」。ディレクトリの読み取り権があれば、ディレクトリの内容を表示できます。
「テーブル」。テーブルの読み取り権があれば、テーブル内のすべてのデータを読み取れます。
「列」。列の読み取り権があれば、その列のすべてのデータを読み取れます。
「エントリ」。エントリの読み取り権があれば、そのエントリのすべてのデータを読み取れます。
「ディレクトリ」。ディレクトリレベルの作成権があれば、テーブル等の新規オブジェクトをディレクトリ内に作成できます。
「テーブル」。テーブルレベルの作成権があれば、テーブル内に新規のエントリを作成できますが、列は作成できません。テーブルレベルの作成権だけでは、テーブルに新規のエントリを追加できますが、新規の列を追加することはできません。
「列」。列の作成権があれば、列内のフィールドに新規のデータを入力できます。新規の列を作成できません。
「エントリ」。エントリの作成権があれば、その行のフィールドに新規のデータを入力できます。(エントリレベルの作成権では新規の行を作成することはできません。)
「ディレクトリ」。ディレクトリレベルの変更権があれば、ディレクトリオブジェクトの移動と名前の変更ができます。
「テーブル」。テーブルレベルの変更権があれば、テーブル内のデータをすべて変更できます。新規の行を作成 (追加) できますが、新規の列は作成できません。空白フィールドにデータを入力することも可能です。
「列」。列の変更権があれば、その列の任意のフィールドのデータを変更できます。
「エントリ」。エントリの変更権があれば、その行の任意のフィールドのデータを変更できます。
「ディレクトリ」。ディレクトリレベルの削除権があれば、テーブル等のディレクトリ内の既存オブジェクトを削除できます。
「テーブル」。テーブルレベルの削除権があれば、テーブル内の既存のエントリ (行) を削除できますが、列は削除できません。削除できるのは既存のエントリだけで、既存の列は削除できません。
「列」。列の削除権があれば、その列の任意のフィールドのデータを削除できます。
「エントリ」。エントリの削除権があれば、その行の任意のフィールドのデータを削除できます。