ロール、権限およびユーザーの管理

Oracle NoSQL Databaseでは、ロールの作成、削除、表示、ユーザーへのロールの付与、ユーザーからのロールの取消し、ロールへの権限の付与、ロールからの権限の取消しを行うコマンドなど、一連のセキュリティ操作が提供されます。これらのすべての文は、SQL CLIまたは管理CLIのexecuteコマンド、あるいはKVStore.execute()やKVStore.executeSync()のAPIを介して実行できます。

ロールの作成

CREATE ROLE role_name 

ここで、role_nameはロールの名前であり、大/小文字は無視されます。

たとえば、

kv-> execute 'CREATE ROLE administrator'
Statement completed successfully 

ロールの削除

DROP ROLE role_name 

ここで、role_nameはロールの名前です。大文字小文字は無視されます。

たとえば、

kv-> execute 'DROP ROLE administrator'
Statement completed successfully 

ロールのステータス

SHOW [AS JSON] ROLES | ROLE role_name 

ここで、role_nameはロールの名前です。

'SHOW ROLES'を実行して、使用可能なロール名をすべてリストするか、ロール名が指定されている場合にはロールの詳細を表示します。

たとえば、

kv->execute 'SHOW ROLES'
role:name=dbadmin
role:name=public
role:name=readonly
role:name=readwrite
role:name=sysadmin
role:name=writeonly 

ロールの詳細情報は、次のようにロール名を指定して表示できます。

kv->execute 'SHOW ROLE dbadmin'
name=dbadmin assignable=true readonly=true
granted-privileges=[SYSDBA, DBVIEW] 

ノート:

assignableは、このロールをユーザーに対して明示的に付与または取消しできることを意味します。

オブジェクト権限は、PRIVILEGE(obj)の形で表示されます。たとえば、'emp'表に対するREAD_TABLEの権限は次のように表示されます。

kv->execute 'CREATE ROLE emptablereader'
kv->execute 'GRANT READ_TABLE ON emp TO emptablereader'
kv->execute 'SHOW ROLE emptablereader'
name=emptablereader assignable=true readonly=false
granted-privileges=[READ_TABLE(emp)] 

ロールまたは権限の付与

GRANT { grant_roles | grant_system_privileges
| grant_object_privileges }
grant_roles ::= role [, role]... TO { USER user | ROLE role }
grant_system_privileges ::=
{system_privilege | ALL PRIVILEGES}
[,{system_privilege | ALL PRIVILEGES}]...
TO role
grant_object_privileges ::=
{object_privileges| ALL [PRIVILEGES]}
[,{object_privileges| ALL [PRIVILEGES]}]...
ON object TO role 

説明:

  • role

    付与されるロール。

  • user

    権限が付与されるユーザー。

  • system_privileges

    付与されるシステム権限。

  • object_privileges

    付与されるオブジェクト権限。

  • object

    権限が付与されるオブジェクト。現在は、表に対する権限のみサポートされています。

  • ALL PRIVILEGES

    すべてのシステム権限を付与します。これはすべてのシステム権限を指定する際のショートカットです。

  • ALL [PRIVILEGES]

    オブジェクトに定義されているすべてのオブジェクト権限を付与します。セマンティック的に明確にするためのキーワードPRIVILEGESは、オプションです。

たとえば、ロールmanageremployeeを付与するなど、より多くの権限を持つロールに、より少ない権限を持つロールを付与できます。


kv-> execute 'GRANT EMPLOYEE TO ROLE manager'
kv-> execute 'GRANT MANAGER TO USER Kate'
Statement completed successfully  

同じ役割を反対方向で付与しようとすると、エラーが発生します。


kv-> execute 'GRANT employee to ROLE manager' 

ロール・マネージャの循環定義になってしまうため、「Could not recursively grant role employee to role manager」のエラーが表示されます。

これでユーザーは、定義されているロールに新しい権限を追加できます。たとえば:

kv-> execute 'GRANT READ_ANY TO Kate' 

たとえば、表T1に対する読取り権限をKateに付与するには、次のようにします。

kv-> execute 'GRANT READ_TABLE on T1 TO Kate' 

「表の所有権」で、表に関する権限を付与する際のノートも参照してください。

ロールまたは権限の取消し

REVOKE { revoke_roles | revoke_system_privileges
| revoke_object_privileges}
revoke_roles ::= role [, role]... FROM { USER user | ROLE role }
revoke_system_privileges ::=
{ system_privilege | ALL PRIVILEGES }
[, {system_privilege | ALL PRIVILEGES}]...
FROM role
revoke_object_privileges ::=
{ object_privileges| ALL [PRIVILEGES] }
[, { object_privileges | ALL [PRIVILEGES] }]...
ON object FROM role 

説明:

  • role

    取り消すロール。

  • user

    権限を取り消す対象のユーザー。

  • system_privileges

    取り消すシステム権限。

  • object_privileges

    取り消すオブジェクト権限。

  • object

    権限を取り消す対象の表。現在サポートされているオブジェクトは表のみです。

  • ALL PRIVILEGES

    対象のユーザーに付与されているシステム権限をすべて取り消します。

  • ALL [PRIVILEGES]

    オブジェクトに対して定義されているオブジェクト権限をすべて、対象から取り消します。セマンティック的に明確にするためのキーワードPRIVILEGESは、オプションです。

たとえば、ロール'employee'をロール'manager'から取り消すには、次のようにします。

kv-> execute 'REVOKE employee FROM ROLE manager'
Statement completed successfully 

ロール'manager'をユーザー'Kate'から取り消す場合は、次のようにします。

kv-> execute 'REVOKE manager FROM USER Kate'
Statement completed successfully 

ネームスペースへの認可アクセス権の付与

ネームスペースおよび表にアクセスするためのユーザーまたはロールの権限を管理できます。開発者および他のユーザーに付与される適用可能な権限は次のとおりです:

表9-1 ネームスペースの権限

権限 説明

CREATE_ANY_NAMESPACE

DROP_ANY_NAMESPACE

ネームスペースを作成または削除する権限をユーザーまたはロールに付与します。
GRANT CREATE_ANY_NAMESPACE TO <User|Role>;
GRANT DROP_ANY_NAMESPACE TO <User|Role>;

CREATE_TABLE_IN_NAMESPACE

DROP_TABLE_IN_NAMESPACE

EVOLVE_TABLE_IN_NAMESPACE

特定のネームスペースの表を作成、削除または展開するための権限をユーザーまたはロールに付与します。表を展開して、表定義を更新したり、フィールドを追加または削除したり、デフォルト値などのフィールド・プロパティを変更できます。特定の種類の列(IDENTITY列など)を追加して、値を自動的に増やすこともできます。すでにストアに存在する表のみが表のエボリューションの候補となります。詳細は、表の変更を参照してください。
GRANT CREATE_TABLE_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>; 
GRANT DROP_TABLE_IN_NAMESPACE ON NAMESPACE  namespace_name TO <User|Role>;
GRANT EVOLVE_TABLE_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>user_role;

CREATE_INDEX_IN_NAMESPACE

DROP_INDEX_IN_NAMESPACE

特定のネームスペースの索引を作成または削除するための権限をユーザーまたはロールに付与します。
GRANT CREATE_INDEX_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>; 
GRANT DROP_INDEX_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>;

READ_IN_NAMESPACE

INSERT_IN_NAMESPACE

DELETE_IN_NAMESPACE

特定のネームスペースで項目を読取り、挿入または削除するロールに権限を付与します。
GRANT READ_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>; 
GRANT INSERT_IN_NAMESPACE ON NAMESPACE  namespace_name TO <User|Role>;
GRANT DELETE_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>;

MODIFY_IN_NAMESPACE

特定のネームスペースのすべてのDDL権限に対する権限をユーザーまたはロールに付与または取り消すためのヘルパー・ラベル。
GRANT MODIFY_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>; 
REVOKE MODIFY_IN_NAMESPACE ON NAMESPACE namespace_name TO <User|Role>;

ネームスペースに対する権限の付与

ネームスペースに対する権限をロールまたはユーザーに付与できます。ネームスペースに対する権限を付与するための構文を次に示します:
GRANT {Namespace-scoped privileges} ON NAMESPACE namespace_name TO <User|Role>
Namespace-scoped privileges ::= namespace_privilege [, namespace_privilege]

ここで、

  • namespace_privilege

    ユーザーまたはロールに付与できるネームスペース権限。適用可能な権限の詳細は、「ネームスペースの権限」の表の権限列を参照してください。

  • namespace_name

    ユーザーがアクセスするネームスペース。

  • <User|Role>

    KVStoreユーザーの名前またはユーザーのロール。

たとえば、ネームスペース内のすべての表に対する読取りアクセス権をユーザーに付与できます。
Example:

GRANT READ_IN_NAMESPACE ON NAMESPACE ns1 TO Kate;

ここで、ns1はネームスペースで、Kateはユーザーです。

ノート:

ラベルMODIFY_IN_NAMESPACEは、特定のネームスペースに対するすべてのDDL権限に対する権限をユーザーまたはロールに付与または取り消すためのヘルパーとして使用できます。

ネームスペースに対する権限の取消し

ロールまたはユーザーからネームスペースに対する権限を取り消すことができます。ネームスペースに対する権限を取り消すための構文を次に示します。
REVOKE {Namespace-scoped privileges} ON NAMESPACE namespace_name FROM <User|Role>
Namespace-scoped privileges ::= namespace_privilege [, namespace_privilege]

ここで、

  • namespace_privilege

    ユーザーまたはロールから取り消すことができるネームスペース権限。適用可能な権限の詳細は、「ネームスペースの権限」の表の権限列を参照してください。

  • namespace_name

    ユーザーがアクセスするネームスペース。

  • <User|Role>

    KVStoreユーザーの名前またはユーザーのロール。

たとえば、ネームスペース内のすべての表のユーザーから読取りアクセス権を取り消すことができます。
Example:

REVOKE READ_IN_NAMESPACE ON NAMESPACE ns1 FROM Kate;

ここで、ns1はネームスペースで、Kateはユーザーです。

ノート:

ラベルMODIFY_IN_NAMESPACEは、特定のネームスペースに対するすべてのDDL権限に対する権限をユーザーまたはロールに付与または取り消すためのヘルパーとして使用できます。
次に例を示します:
  1. ネームスペースおよび表を作成します。
  2. ネームスペース内に他の新しい表を作成する権限を取り消しますが、表の削除を許可します。
Example: Namespace Scoped Privileges

CREATE NAMESPACE IF NOT EXISTS ns1; 
GRANT MODIFY_IN_NAMESPACE ON NAMESPACE ns1 TO usersRole; 
CREATE TABLE ns1:t (id INTEGER, name STRING, primary key (id)); 
INSERT INTO ns1:t VALUES (1, 'Smith'); 
SELECT * FROM ns1:t; 
REVOKE CREATE_TABLE_IN_NAMESPACE ON NAMESPACE ns1 FROM usersRole; 
DROP NAMESPACE ns1 CASCADE;

ノート:

前述のコマンドをすべてsqlスクリプトとして保存し、1つのコマンドで実行できます。前述のコマンドのいずれかをSQLプロンプトの外部で実行する場合は、文末のセミコロンを削除します。