CREATE USER (SQL)
構文
CREATE USER user-name IDENTIFY BY password
CREATE USER user-name IDENTIFIED BY password
CREATE USER user-name [ WITH ] PASSWORD password
説明
CREATE USER コマンドは、指定したパスワードを持つユーザ・アカウントを作成します。
user-name は 160 文字までの有効な識別子です。user-name は、識別子の名前付け規約に従っている必要があります。user-name には Unicode 文字を使用することができます。ユーザ名は、大文字と小文字が区別されません。
区切り識別子として指定された user-name には、SQL 予約語を使用することも、コンマ (,)、ピリオド (.)、キャレット (^)、および 2 文字の矢印シーケンス (->) を含めることもできます。この名前の先頭の文字には、アスタリスク (*) を除く任意の有効な文字を使用できます。
IDENTIFY BY、IDENTIFIED By、および WITH PASSWORD キーワードは同義語です。
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.Security.UserExists()Opens in a new tab メソッドを呼び出すことによって、ユーザが既に存在するかどうかを判別できます。
WRITE $SYSTEM.SQL.Security.UserExists("Admin"),!
WRITE $SYSTEM.SQL.Security.UserExists("BertieWooster")
このメソッドは、指定したユーザが存在する場合 1 を返し、存在しない場合は 0 を返します。ユーザ名は、大文字と小文字が区別されません。
特権
CREATE USER コマンドの実行には特権が必要です。埋め込み SQL で CREATE USER を使用する前に、以下のいずれかを持つユーザとしてログインする必要があります。
-
USE 権限がある %Admin_Secure 管理リソース
-
USE 権限がある %Admin_UserEdit 管理リソース
-
システムに対する全面的なセキュリティ特権
これらの特権がない場合に 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" を参照してください。
引数
user-name
作成するユーザ名。名前は、最大 128 文字の識別子です。Unicode 文字を使用できます。user-name では大文字と小文字が区別されません。
password
このユーザのパスワード。password は少なくとも 3 文字必要で、32 文字を超えることはできません。パスワードは大文字と小文字が区別されます。パスワードには Unicode 文字を使用することができます。
例
以下の埋め込み SQL の例は、“Carl4SHK” というパスワードを持つ “BillTest” という新しいユーザを作成します ($RANDOM トグルが記述されているので、このプログラム例を繰り返し実行できます)。
Main
DO $SYSTEM.Security.Login("_SYSTEM","SYS")
SET x=$SYSTEM.SQL.Security.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.Security.UserExists("BillTest"),!
QUIT
関連項目
-
SQL 文 : ALTER USER、DROP USER、GRANT、REVOKE、CREATE ROLE