特権グループの作成
特権の付与プロセスを効率化するために、複数の特権を特権グループにまとめることをお勧めします。
特権グループと特権の比較
特権グループは複数の特権で構成されます。
特権グループの図解
上図のように、あるロールに3つの異なる権限を付与する必要があるとします。
特権グループを使用しない場合、権限を3回付与する必要があります。
特権グループを使用する場合は、特権グループを作成し、この特権グループに3つの特権を追加して、ロールAに特権グループを付与するだけです。
特権グループを使用すると、ロールに対して複数の特権を一括して付与することができます。
組み込みの特権グループ
Milvusでは、使いやすさを考慮し、コレクション、データベース、インスタンスレベルで合計9つの組み込み権限を提供しています:COLL_RO、COLL_RW、COLL_ADMIN、DB_RO、DB_RW、DB_Admin、Cluster_RO、Cluster_RW、Cluster_Adminです。
3つのレベルの組み込み特権グループにはカスケード関係はありません。インスタンス・レベルで権限グループを設定しても、そのインスタンス配下のすべてのデータベースとコレクションの権限は自動的に設定されません。データベース・レベルとコレクション・レベルの権限は手動で設定する必要があります。
以下の表では、組み込みの各特権グループに含まれる権限について説明します。
コレクション・レベル
CollectionReadOnly (COLL_RO): コレクション・データの読み取り権限が含まれます。
CollectionReadWrite (COLL_RW): コレクションデータの読み取りと書き込みの権限が含まれます。
CollectionAdmin (COLL_ADMIN): コレクションデータの読み取りと書き込み、およびコレクションを管理する権限が含まれます。
下の表は、コレクションレベルの3つの組み込み特権グループに含まれる特定の特権の一覧です:
特権 |
コレクション読み取り専用 |
コレクションReadWrite |
コレクション管理 |
|---|---|---|---|
クエリ |
✔️ |
✔️ |
✔️ |
検索 |
✔️ |
✔️ |
✔️ |
インデックス詳細 |
✔️ |
✔️ |
✔️ |
フラッシュ状態 |
✔️ |
✔️ |
✔️ |
GetLoadState |
✔️ |
✔️ |
✔️ |
GetLoadingProgress |
✔️ |
✔️ |
✔️ |
パーティション |
✔️ |
✔️ |
✔️ |
パーティションの表示 |
✔️ |
✔️ |
✔️ |
エイリアス一覧 |
✔️ |
✔️ |
✔️ |
コレクションを記述する |
✔️ |
✔️ |
✔️ |
エイリアス |
✔️ |
✔️ |
✔️ |
GetStatistics |
✔️ |
✔️ |
✔️ |
インデックス作成 |
❌ |
✔️ |
✔️ |
ドロップインデックス |
❌ |
✔️ |
✔️ |
パーティション作成 |
❌ |
✔️ |
✔️ |
パーティションの削除 |
❌ |
✔️ |
✔️ |
ロード |
❌ |
✔️ |
✔️ |
リリース |
❌ |
✔️ |
✔️ |
挿入 |
❌ |
✔️ |
✔️ |
削除 |
❌ |
✔️ |
✔️ |
アップサート |
❌ |
✔️ |
✔️ |
インポート |
❌ |
✔️ |
✔️ |
フラッシュ |
❌ |
✔️ |
✔️ |
圧縮 |
❌ |
✔️ |
✔️ |
ロードバランス |
❌ |
✔️ |
✔️ |
エイリアス作成 |
❌ |
❌ |
✔️ |
エイリアスの削除 |
❌ |
❌ |
✔️ |
データベースレベル
DatabaseReadOnly (DB_RO): データベースデータの読み取り権限を含む
DatabaseReadWrite (DB_RW) : デー タ ベース デー タ の読み書 き 権限を含む
DatabaseAdmin (DB_Admin): データベース・データの読み取りと書き込み、およびデータベースの管理を行う権限が含まれます。
以下の表は、データベース・レベルの 3 つの組み込み特権グループに含まれる具体的な特権の一覧です:
特権 |
データベース読み取り専用 |
データベースReadWrite |
データベース管理 |
|---|---|---|---|
コレクションの表示 |
✔️ |
✔️ |
✔️ |
データベース |
✔️ |
✔️ |
✔️ |
コレクションの作成 |
✔️ |
✔️ |
✔️ |
ドロップコレクション |
❌ |
❌ |
✔️ |
アルターデータベース |
❌ |
✔️ |
✔️ |
クラスタ・レベル
ClusterReadOnly (Cluster_RO): インスタンス・データの読み取り権限が含まれます。
ClusterReadWrite (Cluster_RW): インスタンス・データを読み書きする権限が含まれます。
ClusterAdmin (Cluster_Admin): インスタンス・データの読み取りと書き込み、およびインスタンスの管理を行う権限が含まれます。
以下の表は、インスタンス・レベルの3つの組み込み特権グループに含まれる具体的な特権の一覧です:
特権 |
クラスタ読み取り専用 |
クラスタ読み取り専用 |
クラスタ管理 |
|---|---|---|---|
データベース一覧 |
✔️ |
✔️ |
✔️ |
名前の変更 |
❌ |
❌ |
✔️ |
オーナーシップの作成 |
❌ |
❌ |
✔️ |
ユーザーの更新 |
❌ |
❌ |
✔️ |
ドロップオーナーシップ |
❌ |
❌ |
✔️ |
セレクトオーナーシップ |
✔️ |
✔️ |
✔️ |
オーナーシップの管理 |
❌ |
❌ |
✔️ |
ユーザー選択 |
✔️ |
✔️ |
✔️ |
バックアップRBAC |
❌ |
❌ |
✔️ |
リストアRBAC |
❌ |
❌ |
✔️ |
リソースグループの作成 |
❌ |
❌ |
✔️ |
リソースグループの削除 |
❌ |
❌ |
✔️ |
リソースグループの更新 |
❌ |
✔️ |
✔️ |
DescribeResourceGroup |
✔️ |
✔️ |
✔️ |
リソースグループの一覧 |
✔️ |
✔️ |
✔️ |
転送ノード |
❌ |
✔️ |
✔️ |
トランスファーレプリカ |
❌ |
✔️ |
✔️ |
データベースの作成 |
❌ |
❌ |
✔️ |
データベースの削除 |
❌ |
❌ |
✔️ |
フラッシュオール |
❌ |
✔️ |
✔️ |
特権グループの作成 |
❌ |
❌ |
✔️ |
特権グループの削除 |
❌ |
❌ |
✔️ |
特権グループのリスト |
❌ |
❌ |
✔️ |
特権グループの操作 |
❌ |
❌ |
✔️ |
手順
特権グループを作成し、その特権グループに特権を追加します。
特権グループの作成
次の例では、privilege_group_1 という名前の特権グループを作成する方法を示します。
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 を追加する方法を示します。
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"]
}'
特権グループからの特権の削除
次の例では、特権グループprivilege_group_1 から特権PrivilegeRestoreRBAC を削除する方法を示します。
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"]
}'
特権グループの一覧表示
以下の例では、既存の特権グループをすべて一覧表示する方法を示します。
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 を削除する方法を示しています。
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"
}'