ロール、権限およびユーザーの管理
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は、オプションです。
たとえば、ロールmanager
にemployee
を付与するなど、より多くの権限を持つロールに、より少ない権限を持つロールを付与できます。
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 ネームスペースの権限
権限 | 説明 |
---|---|
|
ネームスペースを作成または削除する権限をユーザーまたはロールに付与します。
|
|
特定のネームスペースの表を作成、削除または展開するための権限をユーザーまたはロールに付与します。表を展開して、表定義を更新したり、フィールドを追加または削除したり、デフォルト値などのフィールド・プロパティを変更できます。特定の種類の列(IDENTITY列など)を追加して、値を自動的に増やすこともできます。すでにストアに存在する表のみが表のエボリューションの候補となります。詳細は、表の変更を参照してください。
|
|
特定のネームスペースの索引を作成または削除するための権限をユーザーまたはロールに付与します。
|
|
特定のネームスペースで項目を読取り、挿入または削除するロールに権限を付与します。
|
|
特定のネームスペースのすべてのDDL権限に対する権限をユーザーまたはロールに付与または取り消すためのヘルパー・ラベル。
|
ネームスペースに対する権限の付与
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;
ノート:
ラベル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;
ノート:
ラベルMODIFY_IN_NAMESPACEは、特定のネームスペースに対するすべてのDDL権限に対する権限をユーザーまたはロールに付与または取り消すためのヘルパーとして使用できます。- ネームスペースおよび表を作成します。
- ネームスペース内に他の新しい表を作成する権限を取り消しますが、表の削除を許可します。
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プロンプトの外部で実行する場合は、文末のセミコロンを削除します。