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?

CREATE ROLE

ロールを生成します。

Synopsis

CREATE ROLE role-name

引数

role-name 生成するロールの名前。識別子です。ロール名は、大文字と小文字が区別されません。詳細は、"Caché SQL の使用法" の “識別子“ の章を参照してください。

概要

CREATE ROLE コマンドはロールを生成します。ロールは複数のユーザに割り当てることができる名前付きの特権セットです。1 つのロールを複数のユーザに割り当てることも、また複数のロールを 1 人のユーザに割り当てることもできます。ロールはシステム全体で利用できるもので、特定のネームスペースに限定されません。

role-name は最大 64 文字までの有効な識別子です。ロール名の後に、以下の制約がある識別子名前付け規約を置く必要があります。ロール名が、区切られた識別子で、引用符で囲まれていれば、コンマ (,) またはコロン (:) を含めることはできません。区切り識別子は、SQL 予約語であってもかまいません。ロール名には Unicode 文字を使用することができます。ロール名は、大文字と小文字が区別されません。

最初に作成されたときは、ロールは名前が付いているだけで特権はありません。ロールに特権を付与するには、GRANT コマンドを使用します。GRANT コマンドを使用すると、1 つのロールに 1 つ以上のロールを割り当てることもできます。この方法によってロールの階層を作成することができます。

CREATE ROLE を実行して既に存在するロールを作成しようとすると、SQL は SQLCODE -118 エラーを返します。$SYSTEM.SQL.RoleExists()Opens in a new tab メソッドを呼び出すことによって、ロールが既に存在するかどうかを判別できます。

  WRITE $SYSTEM.SQL.RoleExists("%All"),!
  WRITE $SYSTEM.SQL.RoleExists("Madmen")

このメソッドは、指定したロールが存在する場合 1 を返し、存在しない場合は 0 を返します。ロール名は、大文字と小文字が区別されません。

ロールの削除には、DROP ROLE コマンドを使用します。

特権

CREATE ROLE コマンドの実行には特権が必要です。埋め込み SQL で CREATE ROLE を使用する前に、%Admin_Secure (USE 特権) を持つユーザとしてログインする必要があります。特権がない場合は、SQLCODE -99 エラー (特権違反) が返されます。$SYSTEM.Security.Login()Opens in a new tab メソッドを使用して、以下のようにユーザに適切な特権を割り当ててください。

   DO $SYSTEM.Security.Login(username,password)
   &sql(      )

$SYSTEM.Security.Login() メソッドを呼び出すには、%Service_Login:Use 特権が必要です。詳細は、"インターシステムズ・クラス・リファレンス" の "%SYSTEM.SecurityOpens in a new tab" を参照してください。

以下の例は、BkUser という名前のロールを作成します。最初の例のユーザ "FRED" にはロール作成特権がありません。次の例のユーザ "_SYSTEM" にはロール作成特権があります。

  DO $SYSTEM.Security.Login("FRED","FredsPassword")
  &sql(CREATE ROLE BkUser)
  IF SQLCODE=-99 {
    WRITE !,"You don't have CREATE ROLE privileges" }
  ELSEIF SQLCODE=-118 {
    WRITE !,"The role already exists" }
  ELSE {
    WRITE !,"Created a role. Error code is: ",SQLCODE }
  DO $SYSTEM.Security.Login("_SYSTEM","SYS")
Main
  &sql(CREATE ROLE BkUser)
  IF SQLCODE=-99 {
    WRITE !,"You don't have CREATE ROLE privileges" }
  ELSEIF SQLCODE=-118 {
    WRITE !,"The role already exists" }
  ELSE {
    WRITE !,"Created a role. Error code is: ",SQLCODE }
Cleanup
   SET toggle=$RANDOM(2)
   IF toggle=0 { 
     &sql(DROP ROLE BkUser)
     WRITE !,"DROP USER error code: ",SQLCODE
   }
   ELSE { 
     WRITE !,"No drop this time"
     QUIT 
   }

($RANDOM トグルが記述されているので、このプログラム例を繰り返し実行できます。)

関連項目

FeedbackOpens in a new tab