ロールを生成します。
Synopsis
CREATE ROLE role-name
引数
role-name 生成するロールの名前。識別子です。
概要
CREATE ROLE コマンドはロールを生成します。ロールは複数のユーザに割り当てることができる名前付きの特権セットです。1 つのロールを複数のユーザに割り当てることも、また複数のロールを 1 人のユーザに割り当てることもできます。ロールはシステム全体で利用できるもので、特定のネームスペースに限定されません。
role-name は最大 30 文字までの有効な識別子です。ロール名が、区切られた識別子で、引用符で囲まれていれば、SQL 予約語も使用できます。ロール名は、大文字と小文字が区別されません。
最初に作成されたときは、ロールは名前が付いているだけで特権はありません。ロールに特権を付与するには、GRANT コマンドを使用します。GRANT コマンドを使用すると、1 つのロールに 1 つ以上のロールを割り当てることもできます。この方法によってロールの階層を作成することができます。
CREATE ROLE を実行してすでに存在するロールを作成しようとすると、SQL は SQLCODE = –104 エラーを返します。ロールの削除には、DROP ROLE コマンドを使用します。
Caché 5.1 セキュリティ
CREATE ROLE コマンドの実行には特権が必要です。埋め込み SQL で CREATE ROLE を使用する前に、%Admin_Secure (USE 特権) を持つユーザとしてログインする必要があります。この設定を行わないと、SQLCODE -99 (特権違反) になります。$SYSTEM.Security.Login メソッドを使用して、以下のようにユーザに適切な特権を割り当ててください。
   DO $SYSTEM.Security.Login("_SYSTEM","SYS")
   &sql(      )
以下の例は、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=-104 {
    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=-104 {
    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 トグルが記述されているので、このプログラム例を繰り返し実行できます。)
関連項目