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

Oracle NoSQL Databaseでは、ロールの作成、削除、表示、ユーザーへのロールの付与、ユーザーからのロールの取消し、ロールへの権限の付与、ロールからの権限の取消しを行うコマンドなど、一連のセキュリティ操作が提供されます。これらの文はすべて、SQL CLIを使用して実行できます。

SQL CLIを起動するには、SQLシェルの起動を参照してください。

ロールの作成

CREATE ROLE role_name 

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

たとえば、

sql->create ROLE administrator;

ロールの削除

DROP ROLE role_name 

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

たとえば、

sql->drop ROLE administrator;

ロールのステータス

SHOW [AS JSON] ROLES | ROLE role_name 

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

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

たとえば、

sql->show ROLES;
role:name=dbadmin
role:name=public
role:name=readonly
role:name=readwrite
role:name=sysadmin
role:name=writeonly 

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

sql->show AS JSON ROLE dbadmin;
{"name":"dbadmin", "assignable":"true", "readonly":"true","granted-privileges":["SYSDBA","DBVIEW"],"granted-roles":[]} 

ノート:

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

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

sql->create ROLE emptablereader;
sql->grant READ_TABLE ON emp to emptablereader;
sql->show ROLE emptablereader
RoleInstance[ name=emptablereader assignable=true readonly=false granted-privileges=[READ_TABLE(emptable)]]

ロールまたは権限の付与

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を付与するなど、より多くの権限を持つロールに、より少ない権限を持つロールを付与できます。

sql->grant employee to ROLE manager;

ロールmanagerをユーザーKateに次のように付与できます:

sql->grant manager to USER Kate;

同じ役割を反対方向で付与しようとすると、ロール・マネージャの循環定義につながるため、エラーが発生します。

sql->grant manager to ROLE employee;
Error handling command grant manager to ROLE employee: Error: User error in query: GrantRoles failed for: Could not complete grant, circular role grant detected

これで、定義されているロールに新しい権限を追加できます。たとえば、システム権限READ_ANYmanagerに付与するには:

sql->grant READ_ANY to manager;

表T1に対する読取り権限をmanagerに付与するには:

sql->grant READ_TABLE ON T1 to manager;

表権限の付与の詳細は、「表の所有権」を参照してください。

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

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は、オプションです。

たとえば、ロールmanagerからロールemployeeを取り消すには:

sql->revoke employee from ROLE manager;

ユーザーKateからロールmanagerを取り消すには:

sql->revoke manager from USER Kate;

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

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

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

権限 説明

CREATE_ANY_NAMESPACE

DROP_ANY_NAMESPACE

ネームスペースを作成または削除する権限をロールに付与します。
GRANT CREATE_ANY_NAMESPACE TO <Role>;
GRANT DROP_ANY_NAMESPACE TO <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ユーザーの名前またはユーザーのロール。

たとえば、ネームスペース内のすべての表に対する読取りアクセス権をユーザーに付与できます。
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ユーザーの名前またはユーザーのロール。

たとえば、ネームスペース内のすべての表のユーザーから読取りアクセス権を取り消すことができます。
REVOKE READ_IN_NAMESPACE ON NAMESPACE ns1 FROM Kate
ここで、ns1はネームスペースで、Kateはユーザーです。

ノート:

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

次の例は、ネームスペースに対する権限をユーザーまたはロールに付与および取り消す一連のコマンドを示しています:

例: ネームスペース・スコープ指定権限
CREATE NAMESPACE IF NOT EXISTS ns1;
GRANT MODIFY_IN_NAMESPACE ON NAMESPACE ns1 TO <User|Role>;
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 <User|Role>;
DROP NAMESPACE ns1 CASCADE;

ノート:

前述のコマンドをすべてsqlスクリプトとして保存し、1つのコマンドで実行できます。