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 USER

ユーザ・アカウントを作成します。

Synopsis

CREATE USER user-name IDENTIFY BY password

CREATE USER user-name IDENTIFIED BY password

引数

user-name 作成するユーザ名。名前は、最大 128 文字の識別子です。Unicode 文字を使用できます。user-name では大文字と小文字が区別されません。詳細は、"Caché SQL の使用法" の “識別子” の章を参照してください。
password このユーザのパスワード。password は少なくとも 3 文字必要で、32 文字を超えることはできません。パスワードは大文字と小文字が区別されます。パスワードには Unicode 文字を使用することができます。

概要

CREATE USER コマンドは、指定したパスワードを持つユーザ・アカウントを作成します。

user-name は最大 128 文字までの有効な識別子です。ユーザ名が引用符で囲まれた区切り文字付き識別子であり、[区切り識別子をサポート] が [はい] に設定されている場合は、ユーザ名に SQL 予約語も使用できます。ユーザ名は、大文字と小文字が区別されません。

IDENTIFY BY キーワードと IDENTIFIED BY キーワードは同義語です。

password には数値リテラル、識別子、または引用符付きの文字列を指定できます。数値リテラルまたは識別子は引用符で囲む必要はありません。引用符付きの文字列は通常、パスワードに空白を含めるために使用します。引用符付きのパスワードには、文字の任意の組み合わせを使用できますが、引用符自体は使用できません。数値リテラルは 0 ~ 9 の文字のみで構成する必要があります。識別子は、文字 (大文字/小文字) あるいは % (パーセント記号) で始める必要があります。その後ろに、任意の文字、任意の数字、_ (アンダースコア)、& (アンパサンド)、$ (ドル記号)、@ (アットマーク) を自由に組み合わせて使用できます。

パスワードは大文字と小文字が区別されます。パスワードは 3 文字以上 33 文字未満にする必要があります。指定したパスワードが長すぎるか、または短かすぎると、SQLCODE -400 エラーが生成されます。生成される %msg の値は “エラー #845 : パスワードが長さまたはパターンの要件と一致しません” になります。

ホスト変数を使用して user-name または password の値を指定することはできません。

ユーザを作成しても、ロールの作成やユーザへのロールの付与は行われません。ただし、ユーザはデータベースにログインする許可が与えられ、ネームスペースでの SQL 特権を 1 つでも持っていれば、%SQL/Service サービスの USE 許可が与えられます。ユーザに特権やロールを割り当てるには、GRANT コマンドを使用します。ロールの作成には、CREATE ROLE コマンドを使用します。

CREATE USER を実行して既に存在するユーザを作成しようとすると、SQL は SQLCODE -118 エラーを返します。生成される %msg の値は “ユーザが付けた 'name' は既に存在しています” になります。$SYSTEM.SQL.UserExists()Opens in a new tab メソッドを呼び出すことによって、ユーザが既に存在するかどうかを判別できます。

  WRITE $SYSTEM.SQL.UserExists("Admin"),!
  WRITE $SYSTEM.SQL.UserExists("BertieWooster")

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

特権

CREATE USER コマンドの実行には特権が必要です。埋め込み SQL で CREATE USER を使用する前に、適切な特権を持つユーザとしてログインする必要があります。特権がない場合は、SQLCODE -99 エラー (特権違反) が返されます。

$SYSTEM.Security.Login()Opens in a new tab メソッドを使用して、以下のようにユーザに適切な特権を割り当ててください。

   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql( /* SQL code here */  )

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

以下の埋め込み SQL の例は、“Carl4SHK” いうパスワードを持つ “BillTest” という新しいユーザを作成します ($RANDOM トグルが記述されているので、このプログラム例を繰り返し実行できます。)

Main
   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   SET x=$SYSTEM.SQL.UserExists("BillTest")
   IF x=0 {&sql(CREATE USER BillTest IDENTIFY BY Carl4SHK)
           IF SQLCODE '= 0 {WRITE "CREATE USER error: ",SQLCODE,!
                            QUIT}
          }
   WRITE "User BillTest exists",!
Cleanup
   SET toggle=$RANDOM(2)
   IF toggle=0 { 
     &sql(DROP USER BillTest)
     IF SQLCODE '= 0 {WRITE "DROP USER error: ",SQLCODE,!}
     }
   ELSE {WRITE !,"No drop this time",!}
   WRITE "User BillTest exists? ",$SYSTEM.SQL.UserExists("BillTest"),!
   QUIT  

関連項目

FeedbackOpens in a new tab