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
関連項目
-
SQL 文 : ALTER USER、DROP USER、GRANT、REVOKE、CREATE ROLE
-
"Caché SQL の使用法" の “ユーザ、ロール、特権” の章
-
"Caché エラー・リファレンス" にリストされた SQLCODE エラー・メッセージ