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 トグルが記述されているので、このプログラム例を繰り返し実行できます。)
関連項目
-
"Caché SQL の使用法" の “ユーザ、ロール、特権“ の章
-
"Caché エラー・リファレンス" にリストされた SQLCODE エラー・メッセージ