Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

ロール

ロールとは、特権の名前付き集合です。特権の同じセットを必要とするユーザは複数存在する場合が多いため、ロールの使用が便利です。例えば、アプリケーションのすべてのユーザや特定のプロジェクトに携わっているすべての開発者が、特権の共通のセットを必要とすることがあります。 ロールを使用すれば、特権のこのようなセットを 1 回定義しておくことで、関係するユーザにそれを共通で適用でき、将来発生する変更にも極めて容易に対応できます。特権はロールに排他的に割り当てられます。また、ユーザに直接割り当てられることはありません。1 人のユーザにいくつかの特権を割り当てるには、そのような目的のロールを作成します。

ロールに関連する主なトピックは、以下のとおりです。

Note:

テーブルのデータに対する SQL アクセスでは、Caché は行レベル・セキュリティをサポートしています。この設定の詳細は、“Caché オブジェクトの使用法” の “永続クラスのその他のオプション” の章にある “行レベル・セキュリティの追加” を参照してください。

ロールについて

各ロールには、以下のプロパティがあります。

ロールのプロパティ
プロパティ名 プロパティの説明
名前 ロールの一意の識別子。有効な名前の詳細は、“名前付け規約” を参照してください。
説明 任意のテキスト。
特権 リソースと、ロールに関連付けられた許可との組み合わせ。ロールにはゼロ個以上の特権を保持できます。
メンバ ロールに割り当てられているユーザまたはロール ([ロール編集] ページの [メンバ] タブに表示されます)。

これらは、[ロール編集] ページの [一般] タブに表示されます。このページは、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) のテーブルにあるロールの行で [編集] を選択するとアクセスできます。

各ロールは、それに割り当てられたメンバを持つことができるほか、その割り当て先となっている他のロールをメンバとして持つこともできます。これらの制限について、以下のセクションで説明します。

ロール、ユーザ、メンバ、および割り当て

ロールは 1 つ以上の特権を保持するコンテナです。ユーザをロールに関連付けると、そのユーザは関連付けられたロールの特権を実行できます。ユーザとロールの関連付けに使用される用語は以下のとおりです。

  • ユーザはロールに割り当てられます

  • ユーザはロールのメンバです

  • ユーザはロールに含まれます

これらの表現はすべて、互いに同等の意味を持ちます。

各ユーザを複数のロールに割り当てることができます。また、各ロールにはそのメンバとして複数のユーザを指定できます。同様に、各ロールを複数のロールに割り当てることができ、各ロールにはそのメンバとして複数のロールを指定できます。ロールには、そのメンバとしてユーザと他のロールの両方を指定できます。

ある 1 つのロールを別のロールに割り当てるとします。この場合、ロール A をロール B に割り当てるには、ロール A をロール B の “メンバ” として記述します。これで、ロール A をロール B に割り当てるように指定した、またはロール B がロール A に含まれるように指定したことと同じになります。

あるロールを他のロールに割り当てることで、最初のロールでは、2 番目のロールに関連付けられている特権を保持できます。これは、ロールに対するユーザの割り当ての関係に似ています。この場合は、ロールに関連付けられている特権をユーザが保持できます。したがって、ユーザがロールのメンバであり、そのロールが別のロールのメンバである場合、そのユーザは両方のロールに関連付けられている特権を保持します。

例えば、学生に対して UndergraduateStudentGraduateStudent、および GeneralStudent の 3 つのロールを用意している大学があるとします。各学生は UndergraduateStudent または GraduateStudent のいずれかに割り当てられ、この 2 つのロールは両方とも GeneralStudent に割り当てられます。GraduateStudent に割り当てられた Elizabeth は、GraduateStudent に割り当てられた特権と GeneralStudent に割り当てられた特権の両方を保持します。また、UndergraduateStudent に割り当てられた James は、UndergraduateStudent に割り当てられた特権と GeneralStudent に割り当てられた特権の両方を保持します。

ロールのメンバは、[ロール編集] ページの [メンバ] タブに表示されます。このタブでは、ロールに新しいメンバを割り当てることもできます。ロールを他のロールに割り当てると、その割り当て先ロールは [ロール編集] ページの [割り当て先] タブに表示されます。このタブでは、ロールの割り当て先ロールを追加することもできます。

複数ロールの割り当て例

このセクションでは、Caché におけるユーザとロールの関係について説明します。

Lee というユーザと、FirstRole および SecondRole という 2 つのロールがあるとします。FirstRoleFirstResource というリソースを保護し、SecondRoleSecondResource というリソースを保護します。

最初の作成時、Lee はどのロールのメンバでもありません。これは以下のように Lee のプロファイルに反映されます。

generated description: roles newuserprofile

Lee がロール FirstRole に割り当てられると、Lee のプロファイルが変更されます。

generated description: roles oneroleprofile

ロール FirstRole がロール SecondRole に割り当てられる場合も、以下のように Lee のプロファイルが変更されます。

generated description: roles tworoleprofile

Lee の特権リストには、その特権がどのロールのものであるかが示されます。

generated description: roles profiledetail

ロールの作成

開発者、オペレータ、システム管理者、および他のユーザ・クラスが使用するためにロールを定義できます。ロールを作成すると、ロールを編集するさまざまな機能が使用可能となります。

新規ロールを作成する方法は、以下のとおりです。

  1. 管理ポータルのホーム・ページで、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) に移動します。

  2. [ロール] ページで、[新規ロール作成] をクリックします。[ロール編集] ページが表示されます。

  3. [ロール編集] ページには [一般] タブがあります。ここで、以下のプロパティの値を入力します。

    • [名前] (必須) — 新規ロールの名前を指定します。名前付けのルールは、"名前付け規約" を参照してください。

    • [説明] (オプション) — ロールを説明する情報を指定します。

    ロールのリソースが一覧表示されますが、作成済みのロールでないとリソースを受け取ることができないので、この次の手順に記されている条件に該当しない限り、この段階ではリソースは空です。

  4. 類似の特性を持つ複数のロールを簡単に作成するには、[ロール] ページにある [コピー元] フィールドを使用して新規ロールの作成を開始します。このフィールドのドロップダウン・メニューから既存のロールを選択すると、そのユーザのすべての特権がリソースのリストに表示されます。ここで、必要に応じて特権の追加や削除、特権の [説明] プロパティの変更などができます。

  5. [保存] をクリックすると、指定したロールが作成されます。

ロールを作成すると、“ロールの管理” のセクションにある説明に従ってそのロールを編集できます。例えば、[リソース] テーブルで [追加] をクリックすることにより、このロールに新しい特権を追加できます。

Note:

事前定義のロールを変更しないことをお勧めします。

名前付け規約

ユーザ定義ロールの名前は、文字の使用に関して以下の規則に従う必要があります。

  • あらゆる英数字を使用できます。

  • 禁止されている文字 (“,” (コンマ)、“:” (コロン)、“/” (スラッシュ)) を除く記号を使用できます。

  • 先頭に “%” (パーセント記号) は使用できません。これは Caché の事前定義ロール用に予約されています。

  • Unicode 文字を使用できます。

また、ロール名では大文字と小文字が区別されません。したがって、以下の点に注意します。

  • 大文字と小文字が混在した名前を定義すると、入力したとおりの文字の組み合わせで名前が保持されます。

  • 大文字と小文字の違いのみで別の名前とすることはできません。

  • 名前の検索では、大文字と小文字の違いは無視されます。

ロール名の最大長は 64 文字です。

例えば、BasicUser という名前のロールがあるとします。BASICUSER という名前で別のリソースを作成しようとしても失敗します。 また、BasicUserbasicuser、および BASICUSER のいずれの名前を使用しても、このリソースを参照できます。

ロールの管理

ロールを作成すると、さまざまな方法でそのロールを変更できます。以下でそれぞれの方法について説明します。このアクションは以下のいくつかのカテゴリに分類できます。

Note:

ユーザのロールの変更またはロールの特権の変更は、ユーザの既存のプロセスと関連付けられている割り当て済みの特権には影響しません。新しい特権を有効にするには、ユーザはログアウトして再度ログインし、プロセスを再開するか、同等のアクションを実行する必要があります。

既存のロールの確認

現在の既存ロールのリストを表示するには、ポータルで [ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) を表示します。このページでは、以下のフィールドに情報が表示されます。

  • [名前] — ロールの名前 (これは編集できません)。

  • [説明] — ロールの説明として指定されているテキスト。

  • [作成者] — ロールを作成したユーザの名前。

それぞれのロールについて以下の操作が可能です。

  • ロールのプロパティの編集。特権の管理、割り当ての管理、および SQL 関連オプションのすべてのアクションも対象となります。

  • ロールの削除

ロールの削除

ロールを削除する方法は、以下のとおりです。

  1. [ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) で、削除するロールの行で [削除] をクリックします。

  2. 操作を確認するダイアログが表示されます。そのロールを削除する場合は [OK] をクリックし、それ以外の場合は [キャンセル] をクリックします。

ロールに対する新しい特権の付与

ロールに新しい特権を付与する手順は、以下のとおりです。

  1. 既存のロールの [ロール編集] ページ ([システム管理] > [セキュリティ] > [ロール] > [ロール編集]) で、[権限] テーブルにある [追加] ボタンをクリックします。

  2. リソースをすべて一覧表示したページが表示されます。目的のロールに割り当てるリソースを選択するには、そのリソースをクリックします。Ctrl キーまたは Shift キーを使用すると、複数のリソースを同時に選択できます。

  3. 選択したリソースをロールに追加するには、[保存] をクリックします。これによって、そのリソースで使用できるすべての許可がロールに与えられます。これで、このリソースで使用できる許可を変更できるようになります (例えば、データベースに対する許可を Read-Write から Read のみに変更できます)。

ロールの特権の変更

ロールに保持されている特権を変更する手順は、以下のとおりです。

  1. 管理ポータルのホーム・ページで、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) に移動します。

  2. [ロール] ページで、編集するロールの [編集] をクリックします。[ロール編集] ページが表示されます。

  3. [ロール編集] ページにある [リソース] テーブルで、変更対象の特権を持つリソースの [編集] をクリックします。

  4. 選択したリソースに対する許可を編集するためのページが表示されます。必要に応じて、各許可のチェック・ボックスにチェックを付けるか、チェックを外します。

    Note:

    このページでは、個々のリソースについてすべての許可のチェック・ボックスのチェックを外すことはできません。リソースからロールのすべての許可を削除することは、そのリソースからロールの特権を削除することと同じであるためです。

  5. [保存] をクリックすると、新しい状態で特権が保存されます。

これらの変更内容は、[ロール] ページの [リソース] テーブルに反映されます。

ロールからの特権の削除

ロールから特権を削除する方法は、以下のとおりです。

  1. 管理ポータルのホーム・ページで、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) に移動します。

  2. [ロール] ページで、編集するロールの [編集] をクリックします。[ロール編集] ページが表示されます。

  3. [ロール編集] ページにある [リソース] テーブルで、[削除] をクリックします。ロールから、リソースの特権が削除されます。

  4. [保存] をクリックすると、新しい状態で特権が保存されます。

現在のロールに対するユーザまたはロールの割り当て

ロールは、割り当てられたメンバとしてユーザまたは他のロールを持つことができます。ユーザをロールに割り当てると、そのユーザは割当先ロールに関連付けられている特権を保持します。あるロールを他のロールに割り当てると、最初のロールに割り当てられているユーザは、2 番目のロールに関連付けられている特権を保持します。

編集中のロールは “現在の” ロールとして認識されます。現在のロールに割り当てられているユーザとロールは、[ロール編集] ページの [メンバ] タブに表示されます (これらのユーザとロールはメンバとして認識されます)。

現在のロールにユーザまたはロールを割り当てる手順は以下のとおりです。

  1. 管理ポータルのホーム・ページで、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) に移動します。

  2. [ロール] ページで、編集するロールの [編集] をクリックします。[ロール編集] ページが表示されます。

  3. [ロール編集] ページで、[メンバ] タブを選択します。

  4. [メンバ] タブで、[ユーザ] オプションまたは [ロール] オプションを選択して、このロールにユーザを割り当てるか、ロールを割り当てるかを指定します (既定は [ユーザ] です)。

  5. 現在のロールに割り当てることができるユーザまたはロールのリストが、[利用可能] リストに表示されます。[選択済] リストとの間にある矢印ボタンを使用して、2 つのリストの間でこれらを移動できます。

  6. 追加するユーザまたはロールの選択が完了した後、[割り当てる] または [Grant 付で割り当て] をクリックします。[割り当てる] をクリックすると、編集中のロールに新しいメンバ (ユーザまたはロール) が単純に割り当てられます。[Grant 付で割り当て] をクリックすると、新しいメンバで SQL コマンドを使用して、現在のロールに他のユーザまたはロールを割り当てることもできるようになります。

現在のロールからのユーザまたはロールの削除

現在のロールにユーザまたはロールを割り当てておくと、それはそのロールのメンバとして認識されます。ロールからメンバを削除する手順は以下のとおりです。

  1. 管理ポータルのホーム・ページで、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) に移動します。

  2. [ロール] ページで、編集するロールの [編集] をクリックします。[ロール編集] ページが表示されます。

  3. [ロール編集] ページで、[メンバ] タブを選択します。

  4. [メンバ] タブには、現在のロールに割り当てられているユーザとロールのテーブルが表示されています。削除するメンバを示す行の最も右の列にある generated description: roles removebtn ボタンをクリックします。

  5. 削除の処理を確認するプロンプトが表示されます。[OK] をクリックします。

指定したユーザまたはロールが現在のロールから削除されます。

他のロールに対する現在のロールの割り当て

ある 1 つのロールを別のロールに割り当てることができます。あるロールを他のロールに割り当てると、最初のロールに割り当てられているユーザは、2 番目のロールに関連付けられている特権を保持します。

編集中のロールは “現在の” ロールとして認識されます。現在のロールの割り当て先となっているロールは、[ロール編集] ページの [割り当て先] タブに表示されます。

現在のロールを他のロールに割り当てる手順は以下のとおりです。

  1. 管理ポータルのホーム・ページで、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) に移動します。

  2. [ロール] ページで、編集するロールの [編集] をクリックします。[ロール編集] ページが表示されます。

  3. [ロール編集] ページで、[割り当て先] タブを選択します。

  4. 現在のロールを割り当てることができるロールのリストが、[利用可能] リストに表示されます。[選択済] リストとの間にある矢印ボタンを使用して、2 つのリストの間でこれらを移動できます。

  5. 割り当て先とするロールの選択が完了した後、[割り当てる] または [Grant 付で割り当て] をクリックします。[割り当てる] をクリックすると、選択したロールに現在のロールが単純に割り当てられます。[Grant 付で割り当て] をクリックすると、現在のロールで SQL コマンドを使用して、選択したロールに他のユーザまたはロールを割り当てることもできるようになります。

他のロールからの現在のロールの削除

現在のロールを他のロールに割り当てておくと、現在のロールは割り当て先のロールのメンバとして認識されます。他のロールから現在のロールを削除する手順は以下のとおりです。

  1. 管理ポータルのホーム・ページで、[ロール] ページ ([システム管理] > [セキュリティ] > [ロール]) に移動します。

  2. [ロール] ページで、編集するロールの [編集] をクリックします。[ロール編集] ページが表示されます。

  3. [ロール編集] ページで、[割り当て先] タブを選択します。

  4. [割り当て先] タブには、現在のロールの割り当て先となっているロールのテーブルが表示されています。これらのロールのいずれかから現在のロールを削除するには、そのロールを示す行の最も右の列にある generated description: roles removebtn ボタンを選択します。

  5. 削除の処理を確認するプロンプトが表示されます。[OK] をクリックします。

指定したロールから現在のロールが削除されます。

ロールの SQL 関連オプションの変更

どのロールに対しても、以下の SQL 関連の特性を付与または削除できます。

一般的な SQL 特権

[ロール編集] ページの [SQL 権限] タブで、ロールの SQL 特権を追加または削除できます。

  • ロールに特権を追加するには、まずその特権を [利用可能] リストから [選択済] リストに移動します (特権をダブルクリックするか、特権を選択して単線の右矢印をクリックします)。次に [割り当てる] をクリックすると、その特権がロールに付与されます。追加した特権を他のロールに付与できる特権も追加するには、[利用可能] リストの下にある該当のチェック・ボックスにチェックを付けます。

  • ロールにすべての特権を追加するには、[利用可能] リストから [選択済] リストを指している二重線の矢印をクリックします。次に [割り当てる] をクリックすると、これらの特権がロールに付与されます。追加した特権を他のロールに付与できる特権も追加するには、[利用可能] リストの下にある該当のチェック・ボックスにチェックを付けます。

  • ロールから特権を削除するには、特権の名前の右にある [削除] をクリックします。

  • すべての特権をロールから削除するには、現在割り当てられている特権が表示されたテーブルの下にある [すべて削除] をクリックします。

利用できる特権は、以下のとおりです。

  • %ALTER_TABLE — 指定されたネームスペースについて、ロールのメンバは ALTER TABLE コマンドを実行できます。

  • %ALTER_VIEW — 指定されたネームスペースについて、ロールのメンバは ALTER VIEW コマンドを実行できます。

  • %CREATE_FUNCTION — 指定されたネームスペースについて、ロールのメンバは CREATE FUNCTION コマンドを実行できます。

  • %CREATE_METHOD — 指定されたネームスペースについて、ロールのメンバは CREATE METHOD コマンドを実行できます。

  • %CREATE_PROCEDURE — 指定されたネームスペースについて、ロールのメンバは CREATE PROCEDURE コマンドを実行できます。

  • %CREATE_QUERY — 指定されたネームスペースについて、ロールのメンバは CREATE QUERY コマンドを実行できます。

  • %CREATE_TABLE — 指定されたネームスペースについて、ロールのメンバは CREATE TABLE コマンドを実行できます。

  • %CREATE_TRIGGER — 指定されたネームスペースについて、ロールのメンバは CREATE TRIGGER コマンドを実行できます。

  • %CREATE_VIEW — 指定されたネームスペースについて、ロールのメンバは CREATE VIEW コマンドを実行できます。

  • %DROP_FUNCTION — 指定されたネームスペースについて、ロールのメンバは DROP FUNCTION コマンドを実行できます。

  • %DROP_METHOD — 指定されたネームスペースについて、ロールのメンバは DROP METHOD コマンドを実行できます。

  • %DROP_PROCEDURE — 指定されたネームスペースについて、ロールのメンバは DROP PROCEDURE コマンドを実行できます。

  • %DROP_QUERY — 指定されたネームスペースについて、ロールのメンバは DROP QUERY コマンドを実行できます。

  • %DROP_TABLE — 指定されたネームスペースについて、ロールのメンバは DROP TABLE コマンドを実行できます。

  • %DROP_TRIGGER — 指定されたネームスペースについて、ロールのメンバは DROP TRIGGER コマンドを実行できます。

  • %DROP_VIEW — 指定されたネームスペースについて、ロールのメンバは DROP VIEWコマンドを実行できます。

テーブルの特権

[ロール編集] ページの [SQLテーブル] タブで、ロールのテーブル関連 SQL 特権を追加または削除できます。

  1. ページ上部近くにあるドロップダウンから、該当のネームスペースを選択します。そのネームスペースのテーブルのリストが表示されます。

  2. テーブルの特権を変更するには、そのテーブルの行にある [編集] をクリックします。特権を変更するためのウィンドウが表示されます。

  3. このウィンドウで、以下の項目のチェック・ボックスにチェックを付けるか、チェックを外します。

  4. 以上の選択の後、[適用] をクリックすると、テーブルに新しい特権が設定されます。

ロールにテーブルに対する特権がある場合は、このページのテーブルにリストされます。テーブルに対するロールの特権を削除するには、ロールの行の一番右側にある [削除] をクリックします。これをクリックすると、“SAMPLES Sample.Company” のように、ネームスペースとテーブルの正式名称 (スキーマを含む) を含むメッセージが表示されます。

ビューに対する特権

[ロール編集] ページの [SQLビュー] タブで、ロールに対してビュー関連 SQL 特権を追加または削除できます。

ビューの特権を追加する手順は、以下のとおりです。

  1. ページ上部近くにあるドロップダウンから、該当のネームスペースを選択します。そのネームスペースのビューのリストが表示されます。

  2. ビューの特権を変更するには、そのビューの行にある [編集] をクリックします。特権を変更するためのウィンドウが表示されます。

  3. このウィンドウで、以下の項目のチェック・ボックスにチェックを付けるか、チェックを外します。

  4. 以上の選択の後、[適用] をクリックすると、テーブルに新しい特権が設定されます。

ロールにビューに対する特権がある場合は、このページのテーブルにリストされます。ビューに対するロールの特権を削除するには、ロールの行の一番右側にある [削除] をクリックします。これをクリックすると、ネームスペースとビューの正式名称 (スキーマを含む) を含むメッセージが表示されます。

ストアド・プロシージャの特権

[ロール編集] ページの [SQLプロシージャ] タブで、ストアド・プロシージャに関連する、ロールの SQL 特権を追加または削除できます。

ストアド・プロシージャの特権を追加する手順は、以下のとおりです。

  1. ページ上部近くにあるドロップダウンから、該当のネームスペースを選択します。そのネームスペースのストアド・プロシージャのリストが表示されます。

  2. このウィンドウの下にある [追加] をクリックすると、[プロシージャ権限を...に付与] ダイアログが表示されます。

  3. このダイアログの上部にあるドロップダウンから、追加するプロシージャを含むスキーマを選択します。ページの左側部分にある [使用可能] ウィンドウに、このスキーマのプロシージャのリストが表示されます。

  4. 1 つ以上のプロシージャを、[選択済] ウィンドウに移動します。[EXECUTE] チェック・ボックスがチェックが付いていることを確認します。これによって、ストアド・プロシージャを実行する特権を、このロールで保持できるようになります。

  5. 必要に応じて、この特権を他のロールに与える機能をこのロールに与えることができます。この処理を実行するには、このページの下部近くにある [このユーザに Grant 権限を付与する場合はここをチェックします。] ボックスにチェックを付けます。

  6. [適用] をクリックすると、目的の特権がロールに与えられます。

ロールにストアド・プロシージャに対する特権がある場合、このページのテーブルにリストされます。ストアド・プロシージャに対するロールの特権を削除するには、ロールの行の一番右側にある [削除] をクリックします。これをクリックすると、ネームスペースとストアド・プロシージャの正式名称 (スキーマを含む) を含むメッセージが表示されます。

事前定義のロール

Caché には、以下のような多数の事前定義のロールが付属しています。これには、以下のものがあります。

  • %All — すべてのオペレーションを実行する機能です。

  • %Developer — 一般にアプリケーション開発に関連付けられる特権です。ほとんどがポータルの[システム開発] メニューに関連付けられる特権です。これらには、管理ポータルで [WebStress] ページおよび [UnitTest] ページを使用する機能、ならびにドキュメント・クラス・リファレンス (Documatic と呼ばれることもある) が含まれます。

  • %Manager — 一般にシステム管理に関連付けられる特権です。ほとんどがポータルの [システム管理] および [システム処理] メニューに関連付けられる特権です。

  • %Operator — 一般にシステム処理に関連付けられる特権です。ほとんどがポータルの [システム処理] メニューに関連付けられる特権です。

  • %SQL — 一般に SQL 関連タスクに関連付けられる特権です。

  • %SecureBreak%Secure_Break:Use 特権です。保護されたデバッグ・シェルの使用に適用されます。保護されたデバッグ・シェルの詳細は、“システム管理およびセキュリティ” の章の “Secure Shell” の節を参照してください。

Note:

事前定義のロールを変更しないことをお勧めします。それよりも、事前定義のロールに基づいて新しいロールを作成し、その作成したロールを変更してください。

以下のテーブルには、ロールごとの列があります。テーブルの各行には、システム定義リソースと、そのリソースでロールが保持する特権がある場合はその特権が示されています。

事前定義ロールとその特権
リソース %Developer %Manager %Operator %SQL %SecureBreak
%Admin_Manage   Use      
%Admin_Operate   Use Use    
%Admin_Secure   Use      
%Admin_Task   Use      
%DB_CACHE Read Read Read    
%DB_CACHEAUDIT   Read      
%DB_CACHELIB Read Read、Write      
%DB_CACHESYS   Read、Write Read、Write    
%DB_CACHETEMP Read、Write Read、Write Read、Write    
%DB_DOCBOOK Read Read、Write Read    
%DB_SAMPLES Read、Write Read、Write      
%DB_USER Read、Write Read、Write      
%DB_%DEFAULT Read、Write Read、Write      
%Development Use Use      
%Secure_Break         Use
%Service_Console          
%Service_CSP Use Use Use    
%Service_Object Use Use      
%Service_SQL Use Use   Use  
%Service_Telnet Use Use      
%Service_Terminal Use Use      

これら事前定義されたロールの定義は、Caché を新規にインストールするときに設定され、以降のアップグレード・インストールでは変更されません。%All を除き、事前定義のロールの使用はオプションです。

%Admin_Secure リソースは、必要なすべてのセキュリティ・アセットを、ひとまとめの単位として使用可能にしたり、制限したりするために設計されています。これにより、セキュリティ管理者が使用できるように、これらのリソースを容易に分離しておくことができます。

Note:

既定では、%Operator ロールは %Admin_Task:Use 特権を持ちません。このロールのメンバがタスクを管理できるようにする場合、ロールの特権に %Admin_Task:Use を組み込んでください。さらに、%Operator に基づくカスタム・ロールはいずれも、ポータルの [オペレータ] メニューを使用するために %DB_CACHESYS:RW 特権を加える必要があります。また、それらのロールがタスクを管理できるように、%Admin_Task:Use 特権を加えることができます。

%All

事前定義のロール %All は、システム上のすべてのリソースに対するすべての特権を必ず保持しています。このため、%All ロールに属するユーザは、例えば使用可能なリソースがないデータベースをマウントすることもできます。(例外として %Secure_Break:Use 特権があります。これは、常に明示的に付与される必要があります。)

このロールは削除も変更もできません。また、%All ロールを保持しているユーザ・アカウントが必ず 1 つ以上存在している必要があります。そのようなアカウントが 1 つのみである場合、そのアカウントは削除することも、無効にすることもできません。これは、不注意な操作によって、唯一の Caché システム管理者がシステムからロックアウトされないようにするための設計です。

Important:

%All ロールに割り当てられたユーザには、行レベル・セキュリティによって保護されているテーブルの行に対するアクセス権が自動的には付与されません。アプリケーション側で明示的にこのような行へのアクセス権を %All ロールに与える必要があります。この詳細は、“Caché オブジェクトの使用法” の “永続クラスのその他のオプション” の章にある “行レベル・セキュリティの追加” を参照してください。

既定のデータベース・リソース・ロール

データベース・リソースを作成すると、そのリソースに対する Read 許可と Write 許可を持つロール (%DB_<database-resource-name> という名前) が自動的に作成されます。

ログイン・ロールおよび追加ロール

どのような時点でも、各 Caché プロセスには、そのプロセスに対する現在の特権を決定するロールのセットがあります。ロールのセットには、ログイン・ロール追加ロールの両方があります。ログイン・ロールはユーザの定義に基づくもので、ログイン時に得られます。追加ロールは現在実行しているアプリケーションに基づくもので、アプリケーション・ロールのエスカレーションによって得られます。セキュリティの観点からいえば、ロールが何を基にしているかは問題ではありません。重要なことは、必要な特権がプロセスにあるかどうかという点です。

アプリケーションが起動すると、プロセスで現在保持されているロールがテーブル内で 1 つずつ検索され、関連付けられているアプリケーション・ロールがあれば追加されます。

例えば、通常のユーザと管理者という 2 つのクラスのユーザが使用する発注入力アプリケーションがあるとします。通常のユーザに割り当てられているロールは OrderEntryUser で、管理者に割り当てられているロールは OrderEntryManager です。どちらのロールを使用しても、この発注入力アプリケーションを実行できます (つまり、両方のロールに %Application_OrderEntry:Use 特権が割り当てられています)。ただし、アプリケーションでロールのエスカレーションが発生すると、別のロールが使用され (OrderEntryAppNormalOrderEntryAppSpecial および OrderEntryAppReporting)、このアプリケーションでこれらのユーザ・クラスの代わりにさまざまな機能が実行できるようになります。

一致ロール 追加ロール
OrderEntryUser OrderEntryAppNormal
OrderEntryManager OrderEntryAppSpecialOrderEntryAppReporting

一致を検索するシーケンスでは、プロセスで保持されている各ロールは、一致が既に見つかっている場合でも検索の対象となります。言い換えれば、複数のロールが一致し、その結果、新しいロールの複数のセットが追加されることがあります。ただし、このプロセスが繰り返されることはありません。つまり、一致プロセスの結果によって追加されたロールは、以降の一致検索では対象外となります。

Note:

ユーザのロールをログイン・ロールより少なくするよう制限する方法はありません。

追加されたロールと管理ポータルでのアクセスに関するメモ

ユーザが新しいポータル・ページに移動すると、ポータルはユーザのログイン・ロールだけを保持するようにプロセスをリセットします。次に、ポータルはそのページのアプリケーションにリソースが必要かどうかをチェックし、リソースが必要な場合は、ユーザがそのリソースに対する適切な権限を持っているかどうかをチェックします。必要な特権がユーザの特権に含まれていない場合、そのページは使用できなくなります。

ユーザが必要な特権を持っている場合、ポータルはアプリケーション・ロールと該当するターゲット・ロールを追加します。次に、ポータルはページ上のリンクにカスタム・リソースが必要かどうかをチェックし、ユーザが適切なリソースを持っている場合は、それらのリンクを表示します。

プログラムで管理するロール

ルーチンによっては、$ROLES システム変数を以下のように設定することにより、実行中のプロセスのアプリケーション・ロールを直接変更できるものがあります。

 SET $ROLES = "Payroll"

$ROLES には、現行プロセスに割り当てられたロール名のコンマ区切りのリストが格納されます。リスト内のすべてのロールに付与されているすべての特権の集合によって、プロセスが持つ特権が決められます。$ROLES には、認証時に割り当てられたロール (つまり ログイン・ロール) が初期ロールとして格納されています。

このコマンドを実行するには、CACHESYS データベースに組み込んだルーチンから呼び出すか、現在保持している特権に CACHESYS データベースに対する Write 許可 (%DB_CACHESYS:W) が含まれている必要があります。

$ROLES を設定することで変更されるのはプロセスの追加ロールのみであって、ログイン・ロールは変更されません。プロセスで現在保持されているログイン・ロールが Employee および Manager で、追加ロールが Payroll であるとします。

 SET $ROLES = "Accounting"

上の文を実行した後、$ROLES の値は “Employee,Manager,Payroll,Accounting” になります。

プロセスの現在のロールの後にロールを続けて記述することで、現在のロールにロールを追加できます。これには以下のようなコールを使用します。

 SET $ROLES = $ROLES _ ",Payroll"

以下の文を考えます。

 SET $ROLES = ""

この文では、すべての追加ロールが削除されます。

$ROLESNEW コマンドを組み合わせて使用し、ロール (ログイン・ロールと追加ロール) の現在のセットと $USERNAME の現在の値をスタックできます。これによりコードでリストを変更でき、制御によってその格納ブロックが正常または異常な状態で放置されても、終了時に変更が元に戻されます。

引数が NULL 文字である場合を除き、SET $ROLES = <ロール名> という処理はシステム機能です。NEW $ROLES および SET $ROLES = "" は、どのようなコードでも実行できます。

FeedbackOpens in a new tab