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?

$ROLES

現在のプロセスに割り当てられているロールを含みます。

Synopsis

$ROLES

概要

$ROLES は、現在のプロセスに割り当てられているロールのリストを含みます。このロールのリストはコンマで区切られた文字列で構成されており、ユーザ・ロールと追加ロールの両方を含めることができます。

ロールをユーザに割り当てるには、SQL の GRANT 文を使用するか、管理ポータル の システム, セキュリティ管理, ユーザ オプションを使用して、ユーザ定義を編集してロールを割り当てます。ロールを定義するには SQL の CREATE ROLE 文を使用し、削除するには SQL の DROP ROLE 文を使用します。ロールをユーザに割り当てる前にロールを定義する必要があります。ロールをユーザから削除するには、SQL の REVOKE 文を使用します。

JOB コマンドを使用してプロセスを作成すると、その親のプロセスと同じ $ROLES および $USERNAME の値が継承されます。

プロセスが入出力リダイレクトを実行するとき、このリダイレクトは、$ROLES の現在値ではなく、ユーザのログイン $ROLES 値を使用して実行されます。

リストされていないロールに与えられたロール

別のロールにロールを与えるのは、Caché SQL だけでのみ利用できる概念です。ロールに与えられたロールは、SQL 特権をチェックするためのユーザのロールのリストを判断するために SQL 内で使用されます。ObjectScript からはアクセスできません。Caché システム・セキュリティからは他のロールにロールを与えることはできません。そのため、$ROLES 特殊変数リストには、SQL 操作が現在のロールに与えたロールは含まれせん。詳細は、"Caché SQL リファレンス" の "GRANT" コマンドを参照してください。

SET $ROLES

SET コマンドを使用すると、$ROLES に含まれているリストの追加ロールの部分を変更できます。$ROLES を設定すると、プロセスの追加ロールのみが変更されます。プロセスのユーザ・ロールは変更できません。$ROLES を別の追加ロールのリストに設定すると、システム機能が制限されます。ただし、このような制限は $ROLES を NULL 文字列に設定する場合には適用されません。この設定を行うと、追加ロールのリストが削除されます。

ロールを追加する前にロールを定義する必要があります。SQL の CREATE ROLE コマンドを使用して、ロールを定義できます。CREATE ROLE はロールに特権を付与しません。ロールに特権を付与するには、SQL の GRANT 文、または 管理ポータル の システム, セキュリティ管理, ロール インタフェースのいずれかを使用します。

SET $ROLES を使用してプロセス・ロールをエスカレートする前に、NEW $ROLES 文を発行する必要があります。

NEW $ROLES

NEW $ROLES は、$ROLES$USERNAME の両方の現在値をスタックに配置します。$ROLES に対してはセキュリティ制限なしに NEW コマンドを使用できます。

NEW $ROLES を発行し、次に SET $ROLES を発行して追加ロールを提供します。このようにすると、それらの追加ロールを使用するオブジェクト・インスタンスを作成できます。このルーチンを終了した場合は、Caché は、それらの追加ロールを持つオブジェクトを閉じてから、スタックされた $ROLES 値に戻します。

以下の例は、現在のプロセスのロール・リストを返します。

   WRITE $ROLES

以下の例では、最初にロール Vendor、Sales、および Contractor を作成します。既定ロール (ユーザ・ロールと追加ロールの両方が含まれる) のコンマ区切りのリストが表示されます。最初の SET $ROLES は、追加ロールのリストを Sales と Contractor の 2 つのロールに置き換えます。2 番目の SET $ROLES は、Vendor ロールを追加ロールのリストに連結します。最後の SET $ROLES は、すべての追加ロールを削除して、追加ロール・リストを NULL 文字列に設定します。ユーザ・ロールは変更されません。

CreateRoles
   &sql(CREATE ROLE Vendor)
   &sql(CREATE ROLE Sales)
   &sql(CREATE ROLE Contractor)
   IF SQLCODE=0 { 
     WRITE !,"Created new roles"
     DO SetRoles }
   ELSEIF SQLCODE=-118 {
     WRITE !,"Role already exists"
     DO SetRoles }
   ELSE { WRITE !,"CREATE ROLE failed, SQLCODE=",SQLCODE }
SetRoles()
     WRITE !,"Initial: ",$ROLES
     NEW $ROLES
     SET $ROLES="Sales,Contractor"
     WRITE !,"Replaced: ",$ROLES
     NEW $ROLES
     SET $ROLES=$ROLES_",Vendor"
     WRITE !,"Concatenated: ",$ROLES
     SET $ROLES=""
     WRITE !,"Nulled: ",$ROLES

関連項目

FeedbackOpens in a new tab