CREATE ROLE (SQL)
構文
CREATE ROLE role-name
説明
CREATE ROLE コマンドはロールを生成します。ロールは複数のユーザに割り当てることができる名前付きの特権セットです。1 つのロールを複数のユーザに割り当てることも、また複数のロールを 1 人のユーザに割り当てることもできます。ロールはシステム全体で利用できるもので、特定のネームスペースに限定されません。
role-name は 64 文字までの有効な識別子です。role-name は、識別子の名前付け規約に従っている必要があります。ロール名には Unicode 文字を使用することができます。ロール名は、大文字と小文字が区別されません。[区切り識別子をサポート] 構成オプションにチェックが付いている場合 (既定)、role-name を、引用符で囲まれた区切り識別子にすることができます。区切り識別子の場合、role-name に SQL 予約語を使用できます。ピリオド (.)、キャレット (^)、および 2 文字の矢印シーケンス (->) を含めることもできます。コンマ (,) またはコロン (:) 文字を含めることはできません。この名前の先頭の文字には、アスタリスク (*) を除く任意の有効な文字を使用できます。
最初に作成されたときは、ロールは名前が付いているだけで特権はありません。ロールに特権を付与するには、GRANT コマンドを使用します。GRANT コマンドを使用すると、1 つのロールに 1 つ以上のロールを割り当てることもできます。この方法によってロールの階層を作成することができます。
CREATE ROLE を実行して既に存在するロールを作成しようとすると、SQL は SQLCODE -118 エラーを返します。$SYSTEM.SQL.Security.RoleExists()Opens in a new tab メソッドを呼び出すことによって、ロールが既に存在するかどうかを判別できます。
WRITE $SYSTEM.SQL.Security.RoleExists("%All"),!
WRITE $SYSTEM.SQL.Security.RoleExists("Madmen")
このメソッドは、指定したロールが存在する場合 1 を返し、存在しない場合は 0 を返します。ロール名は、大文字と小文字が区別されません。
ロールの削除には、DROP ROLE コマンドを使用します。
特権
CREATE ROLE コマンドの実行には特権が必要です。埋め込み SQL で CREATE ROLE を使用する前に、以下のいずれかを持つユーザとしてログインする必要があります。
-
USE 権限がある %Admin_Secure 管理リソース
-
USE 権限がある %Admin_RoleEdit 管理リソース
-
システムに対する全面的なセキュリティ権限
これらの特権がない場合に CREATE ROLE コマンドを実行すると、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" を参照してください。
引数
role-name
生成するロールの名前。識別子です。ロール名は、大文字と小文字が区別されません。
例
以下の例は、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 トグルが記述されているので、このプログラム例を繰り返し実行できます。)
関連項目
-
SQL 文 : DROP ROLE、CREATE USER、DROP USER、GRANT、REVOKE、%CHECKPRIV