ユーザーの権限の変更¶
データベースやそのビューとストアドプロシージャに対する権限を管理者以外のユーザーに付与できます。このタスクは、ロール「assignprivileges」を持つユーザーだけが実行できます。
ユーザーの権限の変更は、データベースレベルで複数のユーザーに対して行うことも、ユーザー単位で個別に行うこともできます。
データベースによる権限の付与¶
CREATE DATABASE
(「 CREATE DATABASE ステートメントの構文 」を参照) および ALTER DATABASE
ステートメント (「 ALTER PROCEDURE ステートメントの構文 」を参照) では、 GRANT
句や REVOKE
句を指定して、ユーザーまたはロールに対し、データベースへのアクセス権限を付与したり取り消したりすることができます。
ユーザーに付与可能な、データベースに対する権限には、 CONNECT
、 CREATE
、 CREATE_DATA_SOURCE
、 CREATE_VIEW
、 CREATE_DATA_SERVICE
、 CREATE_FOLDER
、 EXECUTE
、 METADATA
、 WRITE
、 FILE
、および ADMIN
があります。管理ガイドの「 アクセス権限のタイプ 」のセクションで、これらの権限について詳しく説明します。
ALL PRIVILEGES
権限を付与すると、 CONNECT
、 CREATE
、 CREATE_DATA_SOURCE
、 CREATE_VIEW
、 CREATE_DATA_SERVICE
、 CREATE_FOLDER
、 EXECUTE
、 METADATA
、 WRITE
、および FILE
権限を付与したことになります。
EXECUTE
権限を付与すると、 EXECUTE
および METADATA
を付与したことになりますが、その逆はありません。
<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
(ストアドプロシージャには適用不可)INDIRECT_ACCESS
(ユーザーには適用不可)
注釈
INDIRECT_ACCESS
権限はデフォルトで無効になっています。これを有効にする場合は、VQL シェルから以下のステートメントを実行します (管理者である必要があります)。
SET 'com.denodo.vdb.security.indirectAccessPrivilegeEnabled'='true'
CREATE
に暗黙的に含まれる権限には、 CREATE_DATA_SOURCE
、 CREATE_VIEW
、 CREATE_DATA_SERVICE
、および CREATE_FOLDER
があります。
EXECUTE
に暗黙的に含まれる権限には、 METADATA
があります。
ユーザーがデータベース全体に対する実行権限や書き込み権限を 持たない 場合、指定したエレメントに割り当てられた権限だけが考慮されます。
管理ガイドの「 アクセス権限のタイプ 」のセクションで、割り当てられた権限に応じてユーザーが実行できる操作について説明しています。
<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 DATASOURCE <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_SOURCE
| 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
| INDIRECT_ACCESS
<procedure privileges> ::=
ALL PRIVILEGES
| <procedure privileges list>
<procedure privileges list> ::=
<procedure privilege> [, <procedure privilege> ]*
<procedure privilege> ::=
EXECUTE
| METADATA
| WRITE
| INSERT
| UPDATE
| DELETE
| INDIRECT_ACCESS
<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
| JDBC
| JSON
| LDAP
| MONGODB
| 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
| 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' SHA512 '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;