ユーザーの権限の変更

データベースやそのビューとストアドプロシージャに対する権限を管理者以外のユーザーに付与できます。このタスクは、管理者ユーザーやロール「assignprivileges」を持つユーザーだけが実行できます。

ユーザーの権限の変更は、データベースレベルで複数のユーザーに対して行うことも、ユーザー単位で個別に行うこともできます。

データベースによる権限の付与

CREATE DATABASE (「 CREATE DATABASE ステートメントの構文 」を参照) および ALTER DATABASE ステートメント (「 ALTER PROCEDURE ステートメントの構文 」を参照) では、 GRANT 句や REVOKE 句を指定して、ユーザーまたはロールに対し、データベースへのアクセス権限を付与したり取り消したりすることができます。

ユーザーに付与可能な、データベースに対する権限には、 CONNECTCREATECREATE_DATA_SOURCECREATE_VIEWCREATE_DATA_SERVICECREATE_FOLDEREXECUTEMETADATAWRITEFILE 、および ADMIN があります。管理ガイドの「 アクセス権限のタイプ 」のセクションで、これらの権限について詳しく説明します。

ALL PRIVILEGES 権限を付与すると、 CONNECTCREATECREATE_DATA_SOURCECREATE_VIEWCREATE_DATA_SERVICECREATE_FOLDEREXECUTEMETADATAWRITE 、および FILE 権限を付与したことになります。

EXECUTE 権限を付与すると、 EXECUTE および METADATA を付与したことになりますが、その逆はありません。

CREATE DATABASE および ALTER DATABASE における GRANT/REVOKE 句の構文
<grant> ::=
    GRANT <database privileges> TO [ ROLE ] <user:identifier>
  | REVOKE <database privileges> TO [ ROLE ] <user:identifier>

<database privileges> ::=
    ADMIN
  | ALL PRIVILEGES
  | <database privilege list>

<database privilege list> ::=
  <database privilege> [, <database privilege> ]*

<database privilege> ::=
    CONNECT
  | CREATE
  | CREATE_DATA_SERVICE
  | CREATE_VIEW
  | CREATE_DATA_SERVICE
  | CREATE_FOLDER
  | METADATA
  | EXECUTE
  | WRITE
  | FILE

ユーザーやロールへの権限の付与

ユーザー権限は、 CREATE USER ステートメント (「 CREATE USER ステートメントの構文 」) および ALTER USER ステートメント (「 ALTER USER ステートメントの構文 」) で付与されます。

ロール権限は、 CREATE ROLE ステートメントおよび ALTER ROLE ステートメントで付与されます。

権限は、 GRANT 句 (権限の割り当て) および REVOKE 句 (権限の取り消し) で管理されます。以下の 2 つは異なるケースと考えられます。

  • データベースに対する権限を割り当てる

  • データベースの指定したビューやストアドプロシージャに対する権限を割り当てる

Syntax of the clauses GRANT/REVOKE of CREATE USER and ALTER USER では、データベースまたはデータベースの特定のビューやプロシージャに対する権限を付与する句の構文について説明しています。

ユーザーやロールに対し、データベースに関するすべてのアクセス権限 (ALL PRIVILEGES)、または以下に示す権限のいくつかを、付与したり取り消したりすることができます。

  • CONNECT 。ユーザーはデータベースに接続することができます。ユーザーがデータベースに対してこの権限を持たない場合、他の権限は無視されます。

  • CREATE 。ユーザーはデータベース内に新しいエレメントを作成することができます。

  • CREATE_DATA_SOURCE 。ユーザーはデータベース内に新しいデータソースを作成することができます。

  • CREATE_VIEW 。ユーザーはデータベース内に新しいビューを作成することができます。

  • CREATE_DATA_SERVICE 。ユーザーはデータベース内に新しいデータサービス (REST、SOAP Web サービス、ウィジェット、JMS リスナー) を作成することができます。

  • CREATE_FOLDER 。ユーザーはデータベース内に新しいフォルダーを作成することができます。

  • METADATA 。ユーザーはビューのメタデータにアクセスできますが、クエリを実行することはできません。

  • EXECUTE 。ユーザーはデータベースのエレメントに対する「実行」権限を持ちます。

  • WRITE 。ユーザーはデータベースのエレメントに対する「書き込み」権限を持ちます。

  • FILE 。ユーザーは「FILE」権限を持ち、[Server Configuration] ウィザードの [File privilege] ダイアログに一覧表示されたディレクトリを閲覧できます。

    管理ガイドの「 FILE 権限 」のセクションで、この権限を有効にする方法とユーザーへの影響について説明しています。

  • ADMIN 。ユーザーはデータベースに対する「Admin (ローカル管理者)」権限を持ちます。

ユーザーやロールに対し、以下に示す特定のビューやプロシージャに関する権限のいくつかを付与したり取り消したりすることができます。

  • EXECUTE

  • METADATA

  • WRITE

  • INSERT (ストアドプロシージャには適用不可)

  • UPDATE (ストアドプロシージャには適用不可)

  • DELETE (ストアドプロシージャには適用不可)

CREATE に暗黙的に含まれる権限には、 CREATE_DATA_SOURCECREATE_VIEWCREATE_DATA_SERVICE 、および CREATE_FOLDER があります。

WRITE に暗黙的に含まれる権限には、 INSERTUPDATE 、および DELETE があります。

EXECUTE に暗黙的に含まれる権限には、 METADATA があります。

ユーザーがデータベース全体に対する実行権限や書き込み権限を 持たない 場合、指定したエレメントに割り当てられた権限だけが考慮されます。

管理ガイドの「 アクセス権限のタイプ 」のセクションで、割り当てられた権限に応じてユーザーが実行できる操作について説明しています。

CREATE USER および ALTER USER の GRANT/REVOKE 句の構文
<grant> ::=
      GRANT <database privileges> ON <database:identifier>
    | GRANT ROLE <role list>
    | GRANT <datasource privileges> ON <data source type> <database:identifier>.<datasource:identifier>
    | GRANT <view privileges> ON <database:identifier>.<view:identifier>
    | GRANT <procedure privileges> ON PROCEDURE
            <database:identifier>.<procedure:identifier>
    | GRANT <data service privileges> ON <service type> <database:identifier>.<data service:identifier>
    | GRANT ADMIN ON <database:identifier>
    | GRANT METADATA ON <database:identifier>
    | GRANT METADATA ON <database:identifier>.<view:identifier>
    | GRANT EXECUTE ( <column list> ) ON <database:identifier>.<view:identifier>
    | GRANT EXECUTE ( <column list> ) ON PROCEDURE
            <database:identifier>.<procedure:identifier>
    | GRANT EXECUTE WHEN [ ANY ] ( <column list> ) THEN <condition:literal>
            [ MASKING ] ON <database:identifier>.<view:identifier>
    | GRANT EXECUTE WHEN [ ANY ] ( <column list> ) THEN <condition:literal>
            [ MASKING ] ON PROCEDURE
            <database:identifier>.<procedure:identifier>
    | GRANT EXECUTE CUSTOM <policy:identifier>
            [ PARAMETERS ( <parameters list> ) ]
            ON <database:identifier>.<view:identifier>
    | GRANT EXECUTE CUSTOM <policy:identifier>
            [ PARAMETERS ( <parameters list> ) ]
            ON PROCEDURE <database:identifier>.<procedure:identifier>
    | REVOKE <database privileges> ON <database:identifier>
    | REVOKE ROLE <role list>
    | REVOKE <datasource privileges> ON <data source type> <database:identifier>.<datasource:identifier>
    | REVOKE <view privileges> ON <database:identifier>.<view:identifier>
    | REVOKE <procedure privileges>
             ON PROCEDURE <database:identifier>.<procedure:identifier>
    | REVOKE <data service privileges> ON <service type> <database:identifier>.<data service:identifier>
    | REVOKE ADMIN ON <database:identifier>
    | REVOKE METADATA ON <database:identifier>
    | REVOKE METADATA ON <database:identifier>.<view:identifier>
    | REVOKE EXECUTE ( <column list> ) ON <database:identifier>.<view:identifier>
    | REVOKE EXECUTE ( <column list> )
             ON PROCEDURE <database:identifier>.<procedure:identifier>
    | REVOKE EXECUTE WHEN [ ANY ] ( <column list> ) THEN <condition:literal>
             [ MASKING ] ON <database:identifier>.<view:identifier>
    | REVOKE EXECUTE WHEN [ ANY ] ( <column list> ) THEN <condition:literal>
             [ MASKING ]
             ON PROCEDURE <database:identifier>.<procedure:identifier>
    | REVOKE EXECUTE CUSTOM <policy:identifier>
             [ PARAMETERS ( <parameters list> ) ]
             ON <database:identifier>.<view:identifier>
    | REVOKE EXECUTE CUSTOM <policy:identifier>
             [ PARAMETERS ( <parameters list> ) ]
             ON PROCEDURE <database:identifier>.<procedure:identifier>

<database privileges> ::=
      ALL PRIVILEGES
    | <database privilege list>

<database privilege list> ::=
  <database privilege> [, <database privilege> ]*

<database privilege> ::=
    CONNECT
  | CREATE
  | CREATE_DATA_SERVICE
  | CREATE_VIEW
  | CREATE_DATA_SERVICE
  | CREATE_FOLDER
  | FILE
  | EXECUTE
  | METADATA
  | WRITE

<role list> ::=
  <role:identifier> [, <role:identifier> ]*

<column list> ::=
  [ <column:identifier> [, <column:identifier>, ]* ]

<view privileges> ::=
    ALL PRIVILEGES
  | <view privileges list>

<view privileges list> ::=
  <view privilege> [, <view privilege> ]*

<view privilege> ::=
    EXECUTE
  | METADATA
  | WRITE
  | INSERT
  | UPDATE
  | DELETE

<procedure privileges> ::=
    ALL PRIVILEGES
  | <procedure privileges list>

<procedure privileges list> ::=
  <procedure privilege> [, <procedure privilege> ]*

<procedure privilege> ::=
    EXECUTE
  | METADATA
  | WRITE
  | INSERT
  | UPDATE
  | DELETE

<datasource privileges> ::=
    ALL PRIVILEGES
  | <datasource privileges list>

<datasource privileges list> ::=
  <data source privilege> [, <data source privilege> ]*

<datasource privilege> ::=
    METADATA
  | EXECUTE
  | WRITE

<data source type> ::=
    CUSTOM
  | DF
  | ESSBASE
  | ITP
  | JDBC
  | JSON
  | LDAP
  | ODBC
  | SALESFORCE
  | SAPBWBAPI
  | SAPERP
  | WS
  | XML

<data service privileges> ::=
    ALL PRIVILEGES
  | <data service privileges list>

<data service privileges list> ::=
  <data service privilege> [, <data service privilege> ]*

<data service privilege> ::=
    METADATA
  | WRITE

<service type> ::=
    WEBSERVICE
  | WIDGET
  | LISTENER

<parameters list> ::=
  <name:literal <value> [, name:literal <value> ]*

<value> ::=
    NULL
  | <number>
  | <boolean>
  | <literal>

指定した権限の割り当てだけでなく、 GRANT ROLE パラメーター (「 ユーザーのロールの管理 」のセクションを参照) を使用して、ユーザーにロールを割り当てることができます。

データベースやデータベースの一部のエレメントに対する「実行」権限の割り当てのほか、以下に示す、さらに詳細な権限の割り当てが可能です。

  • 列権限 。ユーザーがビューに対する EXECUTE 権限を持っていると、そのビューに対しクエリを実行してビューのすべてのデータを取得することができます。ただし、ユーザーによりビューの一部の列だけが投影されるようにしたい場合には、「列権限」を使用できます。

    そのためには、以下のパラメーターを使用します。

    • GRANT EXECUTE ( <column list> ) ON... は、ユーザーがある特定のビューに対してクエリを実行するときに取得できる列を制限します。ユーザーは column list の列だけを取得できます。

    • GRANT EXECUTE ( <column list> ) ON PROCEDURE... は、ユーザーがある特定のストアドプロシージャを実行するときに取得できる列を制限します。管理ガイドの「 アクセス権限のタイプ 」および「 列権限 」のセクションでその詳細を説明しています。

  • 制限 。ユーザーまたはロールがビューに対する EXECUTE アクセス権限を持つ場合、ユーザーに返される行をフィルタリングする制限を追加できます。そうすると、そのユーザーがビューに対してクエリを実行した場合に、特定の条件に一致した行だけが結果に含まれるようになります。

    クエリで特定の一連のフィールドを探す場合にのみフィルター条件が適用されるよう指定することもできます。

    そのためには、以下のパラメーターを使用します。

    • GRANT EXECUTE WHEN [ ANY ]( [ <column list> ] ) THEN <condition:literal> ON...

      ユーザーがこのビューに対してクエリを実行すると、結果には condition に一致する行だけが含まれます。

      column list が空の場合は常に条件が評価されます。

      column list が空でない場合は、最低でも column list のすべての列がクエリで投影される場合にのみ、条件が評価されます。

      column list が空でなく、 ANY 修飾子が使用されて おらず 、クエリにより column list の一部のフィールド だけ が投影される場合は、クエリですべての行が返されます。

      column list が空でなく、 ANY 修飾子が使用されていて、クエリにより column listいずれかの フィールドが投影される場合は、条件が評価され、条件に一致するすべての行だけが返されます。

    • GRANT EXECUTE WHEN [ ANY ] ( [ <column list> ] ) THEN <condition:literal> ON PROCEDURE...

      前の構文と同じですが、ビューの代わりに、Virtual DataPort のストアドプロシージャに対するそれらの権限の割り当てに使用する必要があります。

  • カスタムポリシー (CUSTOM) 。ユーザーまたはロールがビューに対する EXECUTE アクセス権限を持つ場合、ユーザーやロールに返される行をフィルタリングするカスタムポリシーを追加できます。カスタムポリシーは制限に似ていますが、より複雑な情報を考慮することができます。

    PARAMETERS はカスタムポリシーに渡されるパラメーターを含みます。

    カスタムポリシーの作成方法については、開発者ガイドの「 カスタムポリシー 」のセクションを、ユーザーやロールへのカスタムポリシーの適用方法については、管理ガイドの「 Modifying the Privileges of a User 」のセクションをそれぞれ参照してください。

このステートメントは以下の処理を実行します。

  • 2 つのデータベース、「database1」と「database2」を作成します。

  • ユーザー「user1」を作成します。このユーザーには、「database1」、「database2」、「admin」に対する以下の権限が割り当てられます。

    • データベース「database1」に対するすべての権限

    • 「database2」に対する接続権限とエレメントの作成権限

    • 「database2」の「view1」に対するクエリの実行、および INSERT、UPDATE、DELETE の各権限

    • 「internet_inc」の「summary」および「taxid」フィールドだけが投影されます。

    • ユーザーがビュー「phone_inc」に対してクエリを実行すると、サーバーは条件 description like '%ADSL%' に一致する行だけを返します。

ユーザーへの権限の割り当て例
CREATE DATABASE database1 'Database1 Description';
CREATE DATABASE database2 'Database2 Description';
CREATE USER user1 'user1password' 'User1 Description'
   GRANT ALL PRIVILEGES ON database1
   GRANT CONNECT, CREATE ON database2
   GRANT EXECUTE, WRITE ON database2.view1
   GRANT EXECUTE (summary, taxid) ON admin.internet_inc
   GRANT EXECUTE WHEN() THEN 'description like ''%cable%'''
   ON admin.phone_inc;