特権と特権グループ
特権とは、クラスター、データベース、コレクションなどの特定の Zilliz Cloud リソースに対する特定の操作の許可を指します。特権はロールに割り当てられ、そのロールがユーザーに付与されることで、ユーザーがリソースに対して実行できる操作が定義されます。特権の例としては、collection_01 という名前のコレクションにデータを挿入する許可などがあります。
特権グループは、個別の特権を組み合わせたものです。よく使用する特権の特権グループを作成することで、ロール付与プロセスを簡略化できます。利便性のため、Zilliz Cloud はコレクションレベル、データベースレベル、クラスターレベルで合計 9 つの組み込み特権グループを提供しています。
以下の図は、特権と特権グループの異なる付与プロセスを示しています。

このトピックでは、Zilliz Cloud で利用可能な組み込み特権グループと特権について詳しく説明します。
特権グループ
組み込み特権グループ
Zilliz Cloud は、コレクションレベル、データベースレベル、クラスターレベルで合計 9 つの組み込み特権グループを提供しており、ロールの作成時に直接付与できます。
3 つのレベルの組み込み特権グループにはカスケード関係はありません。クラスターレベルで特権グループを設定しても、そのインスタンス配下のすべてのデータベースとコレクションの権限が自動的に設定されるわけではありません。データベースレベルとコレクションレベルの特権は手動で設定する必要があります。
コレクションレベルの特権グループ
-
CollectionReadOnly (COLL_RO): コレクションデータの読み取り特権を含む
-
CollectionReadWrite (COLL_RW): コレクションデータの読み取りと書き込み特権を含む
-
CollectionAdmin (COLL_ADMIN): コレクションデータの読み取りと書き込み、およびコレクションの管理特権を含む
以下の表は、コレクションレベルの 3 つの組み込み特権グループに含まれる具体的な特権を示しています。
特権 | CollectionReadOnly | CollectionReadWrite | CollectionAdmin |
|---|---|---|---|
Query | ✔️ | ✔️ | ✔️ |
Search | ✔️ | ✔️ | ✔️ |
IndexDetail | ✔️ | ✔️ | ✔️ |
GetFlushState | ❌ | ✔️ | ✔️ |
GetLoadState | ✔️ | ✔️ | ✔️ |
GetLoadingProgress | ✔️ | ✔️ | ✔️ |
HasPartition | ✔️ | ✔️ | ✔️ |
Showパーティション | ✔️ | ✔️ | ✔️ |
Listエイリアスes | ✔️ | ✔️ | ✔️ |
DescribeCollection | ✔️ | ✔️ | ✔️ |
Describeエイリアス | ✔️ | ✔️ | ✔️ |
GetStatistics | ✔️ | ✔️ | ✔️ |
CreateIndex | ❌ | ✔️ | ✔️ |
DropIndex | ❌ | ✔️ | ✔️ |
CreatePartition | ❌ | ✔️ | ✔️ |
DropPartition | ❌ | ✔️ | ✔️ |
Load | ✔️ | ✔️ | ✔️ |
Release | ❌ | ✔️ | ✔️ |
Insert | ❌ | ✔️ | ✔️ |
Delete | ❌ | ✔️ | ✔️ |
Upsert | ❌ | ✔️ | ✔️ |
Import | ❌ | ✔️ | ✔️ |
Flush | ❌ | ✔️ | ✔️ |
Compaction | ❌ | ❌ | ✔️ |
LoadBalance | ❌ | ✔️ | ✔️ |
Createエイリアス | ❌ | ✔️ | ✔️ |
Dropエイリアス | ❌ | ✔️ | ✔️ |
AddCollectionField | ❌ | ✔️ | ✔️ |
データベースレベルの特権グループ
-
データベースReadOnly (DB_RO): データベースデータの読み取り特権を含む
-
データベースReadWrite (DB_RW): データベースデータの読み取りと書き込み特権を含む
-
データベースAdmin (DB_Admin): データベースデータの読み取りと書き込み、およびデータベースの管理特権を含む
以下の表は、データベースレベルの 3 つの組み込み特権グループに含まれる具体的な特権を示しています。
特権 | データベースReadOnly | データベースReadWrite | データベースAdmin |
|---|---|---|---|
ShowCollections | ✔️ | ✔️ | ✔️ |
Describeデータベース | ✔️ | ✔️ | ✔️ |
CreateCollection | ❌ | ✔️ | ✔️ |
DropCollection | ❌ | ✔️ | ✔️ |
Alterデータベース | ❌ | ❌ | ❌ |
クラスターレベルの特権グループ
-
ClusterReadOnly (Cluster_RO): インスタンスデータの読み取り特権を含む
-
ClusterReadWrite (Cluster_RW): インスタンスデータの読み取りと書き込み特権を含む
-
ClusterAdmin (Cluster_Admin): インスタンスデータの読み取りと書き込み、およびインスタンスの管理特権を含む
以下の表は、クラスターレベルの 3 つの組み込み特権グループに含まれる具体的な特権を示しています。
特権 | ClusterReadOnly | ClusterReadWrite | ClusterAdmin |
|---|---|---|---|
Listデータベースs | ✔️ | ✔️ | ✔️ |
RenameCollection | ❌ | ✔️ | ✔️ |
Createオーナーship | ❌ | ❌ | ✔️ |
UpdateUser | ❌ | ❌ | ✔️ |
Dropオーナーship | ❌ | ❌ | ✔️ |
Selectオーナーship | ❌ | ❌ | ✔️ |
Manageオーナーship | ❌ | ❌ | ✔️ |
SelectUser | ❌ | ❌ | ✔️ |
BackupRBAC | ❌ | ❌ | ❌ |
RestoreRBAC | ❌ | ❌ | ❌ |
CreateResourceGroup | ❌ | ❌ | ❌ |
DropResourceGroup | ❌ | ❌ | ❌ |
UpdateResourceGroups | ❌ | ❌ | ❌ |
DescribeResourceGroup | ❌ | ❌ | ❌ |
ListResourceGroups | ❌ | ❌ | ❌ |
TransferNode | ❌ | ❌ | ❌ |
TransferReplica | ❌ | ❌ | ❌ |
Createデータベース | ❌ | ✔️ | ✔️ |
Dropデータベース | ❌ | ✔️ | ✔️ |
FlushAll | ❌ | ❌ | ❌ |
CreatePrivilegeGroup | ❌ | ❌ | ❌ |
DropPrivilegeGroup | ❌ | ❌ | ❌ |
ListPrivilegeGroups | ✔️ | ✔️ | ✔️ |
OperatePrivilegeGroup | ❌ | ❌ | ❌ |
カスタム特権グループ
組み込み特権がニーズを満たさない場合は、SDK を使用してカスタム特権グループを作成し、指定した特権を特権グループに追加できます。
カスタム特権グループの作成と管理については、サポートチケットの作成 を行っていただき、この機能を有効化してください。
カスタム特権グループの作成
以下の例は、privilege_group_1 という名前の特権グループを作成する方法を示しています。
- Python
- Go
- Java
- NodeJS
- cURL
from pymilvus import MilvusClient
client.create_privilege_group(group_name='privilege_group_1')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.CreatePrivilegeGroup(ctx, milvusclient.NewCreatePrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.CreatePrivilegeGroupReq;
client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
await client.createPrivilegeGroup({
group_name: 'privilege_group_1',
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'
カスタム特権グループが作成されたら、その特権グループに特権を追加できます。
カスタム特権グループへの特権の追加
以下の例では、先ほど作成した特権グループ privilege_group_1 に PrivilegeBackupRBAC と PrivilegeRestoreRBAC の特権を追加する方法を示します。Zilliz Cloud で利用可能なすべての特権の詳細については、すべての特権 を参照してください。
- Python
- Go
- Java
- NodeJS
- cURL
from pymilvus import MilvusClient
client.add_privileges_to_group(group_name='privilege_group_1', privileges=['Query', 'Search'])
import "github.com/milvus-io/milvus/client/v2/milvusclient"
privileges := []string{"Query", "Search"}
err = client.AddPrivilegesToGroup(ctx, milvusclient.NewAddPrivilegesToGroupOption("privilege_group_1", privileges...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.AddPrivilegesToGroupReq;
client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Arrays.asList("Query", "Search"))
.build());
await client.addPrivilegesToGroup({
group_name: privilege_group_1,
privileges: ['Query', 'Search'],
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/add_privileges_to_group" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Query", "Search"]
}'
特権が特権グループに追加されたら、その特権グループをロールに付与できます。詳細については、クラスターロールの管理 (SDK) を参照してください。
カスタム特権グループからの特権の削除
以下の例は、特権グループ privilege_group_1 から特権 PrivilegeRestoreRBAC を削除する方法を示しています。
- Python
- Go
- Java
- NodeJS
- cURL
from pymilvus import MilvusClient
client.remove_privileges_from_group(group_name='privilege_group_1', privileges='Search')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.RemovePrivilegesFromGroup(ctx, milvusclient.NewRemovePrivilegesFromGroupOption("privilege_group_1", []string{"Search"}...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.RemovePrivilegesFromGroupReq;
client.removePrivilegesFromGroup(RemovePrivilegesFromGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Collections.singletonList("Search"))
.build());
await client.removePrivilegesFromGroup({
group_name: "privilege_group_1",
privileges: ["Search"],
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/remove_privileges_from_group" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Search"]
}'
List 特権グループs
次の例は、既存のすべての特権グループを一覧表示する方法を示しています。
- Python
- Go
- Java
- NodeJS
- cURL
from pymilvus import MilvusClient
client.list_privilege_groups()
import "github.com/milvus-io/milvus/client/v2/milvusclient"
groups, err := client.ListPrivilegeGroups(ctx, milvusclient.NewListPrivilegeGroupsOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.PrivilegeGroup;
import io.milvus.v2.service.rbac.request.ListPrivilegeGroupsReq;
import io.milvus.v2.service.rbac.response.ListPrivilegeGroupsResp;
ListPrivilegeGroupsResp resp = client.listPrivilegeGroups(ListPrivilegeGroupsReq.builder()
.build());
List<PrivilegeGroup> groups = resp.getPrivilegeGroups();
await client.listPrivilegeGroups();
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{}'
以下は出力例です。
PrivilegeGroupItem: <privilege_group:privilege_group_1>, <privileges:('Search', 'Query')>
カスタム特権グループの削除
次の例では、特権グループ privilege_group_1 を削除する方法を示します。
- Python
- Go
- Java
- NodeJS
- cURL
from pymilvus import MilvusClient
client.drop_privilege_group(group_name='privilege_group_1')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.DropPrivilegeGroup(ctx, milvusclient.NewDropPrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.DropPrivilegeGroupReq;
client.dropPrivilegeGroup(DropPrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
await client.dropPrivilegeGroup({group_name: 'privilege_group_1'});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/drop" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'
すべての特権
以下は、Zilliz Cloud で利用可能なすべての特権です。
以下にリストされた特権で独自の特権グループを作成する必要がある場合、または特権を持つカスタムロールを作成する場合は、お問い合わせ ください。
データベース特権
特権 | 説明 |
|---|---|
Listデータベースs | 現在のインスタンス内のすべてのデータベースを表示する |
Describeデータベース | データベースの詳細を表示する |
Createデータベース | データベースを作成する |
Dropデータベース | データベースを削除する |
Alterデータベース | データベースのプロパティを変更する |
コレクション特権
特権 | 説明 |
|---|---|
GetFlushState | コレクションのフラッシュ操作のステータスを確認する |
GetLoadState | コレクションのロード状態を確認する |
GetLoadingProgress | コレクションのロード進捗を確認する |
ShowCollections | コレクション特権を持つすべてのコレクションを表示する |
Listエイリアスes | コレクションのすべてのエイリアスを表示する |
DescribeCollection | コレクションの詳細を表示する |
Describeエイリアス | エイリアスの詳細を表示する |
GetStatistics | コレクションの統計情報を取得する(例:コレクション内のエンティティ数) |
CreateCollection | コレクションを作成する |
DropCollection | コレクションを削除する |
Load | コレクションをロードする |
Release | コレクションをリリースする |
Flush | コレクション内のすべてのエンティティをシールドセグメントに永続化する。フラッシュ操作後に挿入されたエンティティは新しいセグメントに保存される。 |
Compaction | 手動でコンパクションをトリガーする |
RenameCollection | コレクションの名前を変更する |
Createエイリアス | コレクションのエイリアスを作成する |
Dropエイリアス | コレクションのエイリアスを削除する |
FlushAll | データベース内のすべてのコレクションをフラッシュする |
AddCollectionField | 既存のコレクションにフィールドを追加する |
パーティション特権
特権 | 説明 |
|---|---|
HasPartition | パーティションが存在するかどうかを確認する |
Showパーティション | コレクション内のすべてのパーティションを表示する |
CreatePartition | パーティションを作成する |
DropPartition | パーティションを削除する |
インデックス特権
特権 | 説明 |
|---|---|
IndexDetail | インデックスの詳細を表示する |
CreateIndex | インデックスを作成する |
DropIndex | インデックスを削除する |
リソース管理特権
特権 | 説明 |
|---|---|
LoadBalance | ロードバランスを実現する |
CreateResourceGroup | リソースグループを作成する |
DropResourceGroup | リソースグループを削除する |
UpdateResourceGroups | リソースグループを更新する |
DescribeResourceGroup | リソースグループの詳細を表示する |
ListResourceGroups | 現在のインスタンスのすべてのリソースグループを表示する |
TransferNode | リソースグループ間でノードを転送する |
TransferReplica | リソースグループ間でレプリカを転送する |
BackupRBAC | 現在のインスタンスですべてのRBAC関連操作のバックアップを作成する |
RestoreRBAC | 現在のインスタンスですべてのRBAC関連操作のバックアップを復元する |
エンティティ特権
特権 | 説明 |
|---|---|
Query | クエリを実行する |
Search | 検索を実行する |
Insert | エンティティを挿入する |
Delete | エンティティを削除する |
Upsert | エンティティをアップサートする |
Import | エンティティを一括挿入またはインポートする |
RBAC特権
特権 | 説明 |
|---|---|
Createオーナーship | ユーザまたはロールを作成する |
UpdateUser | ユーザのパスワードを更新する |
Dropオーナーship | ユーザのパスワードまたはロールを削除する |
Selectオーナーship | 特定のロールが付与されたすべてのユーザを表示する |
Manageオーナーship | ユーザまたはロールを管理する、またはユーザにロールを付与する |
SelectUser | ユーザに付与されたすべてのロールを表示する |
CreatePrivilegeGroup | 特権グループを作成する |
DropPrivilegeGroup | 特権グループを削除する |
ListPrivilegeGroups | 現在のインスタンス内のすべての特権グループを表示する |
OperatePrivilegeGroup | 特権グループに特権を追加または特権グループから特権を削除する |