特権グループの作成
特権の付与プロセスを効率化するために、複数の特権を特権グループにまとめることをお勧めします。
特権グループと特権の比較
特権グループは複数の特権で構成されます。
特権グループの例
上図のように、あるロールに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つのレベルの組み込み特権グループにはカスケード関係はありません。インスタンス・レベルで権限グループを設定しても、そのインスタンス配下のすべてのデータベースとコレクションに自動的に権限が設定されるわけではありません。データベース・レベルとコレクション・レベルの権限は手動で設定する必要があります。
以下の表では、組み込みの各特権グループに含まれる権限について説明します。
コレクション・レベル
COLL_RO: コレクション・データの読み取り権限が含まれます。
COLL_RW: コレクション・データの読み取りと書き込みの権限が含まれます。
COLL_ADMIN: コレクション・データの読み取りと書き込み、およびコレクションを管理する権限が含まれます。
下の表は、コレクションレベルの3つの組み込み特権グループに含まれる特定の特権の一覧です。
**特権 | **コレクションReadOnly**権限 | コレクションReadOnly** **コレクションReadWrite** **コレクションAdmin | **CollectionAdmin** |
---|---|---|---|
クエリ | ✔️ | ✔️ | ✔️ |
検索 | ✔️ | ✔️ | ✔️ |
インデックス詳細 | ✔️ | ✔️ | ✔️ |
フラッシュ状態 | ✔️ | ✔️ | ✔️ |
GetLoadState | ✔️ | ✔️ | ✔️ |
GetLoadingProgress | ✔️ | ✔️ | ✔️ |
パーティション | ✔️ | ✔️ | ✔️ |
パーティションの表示 | ✔️ | ✔️ | ✔️ |
エイリアス一覧 | ✔️ | ✔️ | ✔️ |
コレクションを記述する | ✔️ | ✔️ | ✔️ |
エイリアス | ✔️ | ✔️ | ✔️ |
GetStatistics | ✔️ | ✔️ | ✔️ |
インデックス作成 | ❌ | ✔️ | ✔️ |
ドロップインデックス | ❌ | ✔️ | ✔️ |
パーティション作成 | ❌ | ✔️ | ✔️ |
パーティションの削除 | ❌ | ✔️ | ✔️ |
ロード | ❌ | ✔️ | ✔️ |
リリース | ❌ | ✔️ | ✔️ |
挿入 | ❌ | ✔️ | ✔️ |
削除 | ❌ | ✔️ | ✔️ |
アップサート | ❌ | ✔️ | ✔️ |
インポート | ❌ | ✔️ | ✔️ |
フラッシュ | ❌ | ✔️ | ✔️ |
圧縮 | ❌ | ✔️ | ✔️ |
ロードバランス | ❌ | ✔️ | ✔️ |
エイリアス作成 | ❌ | ❌ | ✔️ |
エイリアスの削除 | ❌ | ❌ | ✔️ |
データベースレベル
DB_RO: データベース・データの読み取り権限を含む
DB_RW: データベースの読み書き権限を含む
DB_Admin : デー タ ベース デー タ の読み取 り と 書 き込み、 デー タ ベース を管理す る 権限が含まれます。
以下の表は、データベース・レベルの 3 つの組み込み特権グループに含まれる具体的な特権の一覧です。
**特権 | **データベースReadOnly**。 | **データベース読み取り専用 | **データベース管理者 |
---|---|---|---|
コレクションを表示 | ✔️ | ✔️ | ✔️ |
データベース | ✔️ | ✔️ | ✔️ |
コレクション作成 | ❌ | ❌ | ✔️ |
コレクションの削除 | ❌ | ❌ | ✔️ |
アルターデータベース | ❌ | ✔️ | ✔️ |
クラスタレベル
Cluster_RO: インスタンス・データの読み取り権限を含む
Cluster_RW: インスタンス・データを読み書きする権限が含まれます。
Cluster_Admin: インスタンス・データの読み取りと書き込み、およびインスタンスの管理を行う権限が含まれます。
以下の表は、インスタンス・レベルの3つの組み込み権限グループに含まれる特定の権限の一覧です。
**特権 | **ClusterReadOnly**: インスタンス・データの読み取りと書き込み、およびインスタンスの管理が含まれます。 | **ClusterReadWrite** | **クラスタ管理者 |
---|---|---|---|
リスト・データベース | ✔️ | ✔️ | ✔️ |
名前の変更 | ❌ | ❌ | ✔️ |
オーナーシップの作成 | ❌ | ❌ | ✔️ |
ユーザーの更新 | ❌ | ❌ | ✔️ |
ドロップオーナーシップ | ❌ | ❌ | ✔️ |
セレクトオーナーシップ | ✔️ | ✔️ | ✔️ |
オーナーシップの管理 | ❌ | ❌ | ✔️ |
ユーザー選択 | ✔️ | ✔️ | ✔️ |
バックアップRBAC | ❌ | ❌ | ✔️ |
リストアRBAC | ❌ | ❌ | ✔️ |
リソースグループの作成 | ❌ | ❌ | ✔️ |
リソースグループの削除 | ❌ | ❌ | ✔️ |
リソースグループの更新 | ❌ | ✔️ | ✔️ |
DescribeResourceGroup | ✔️ | ✔️ | ✔️ |
リソースグループの一覧 | ✔️ | ✔️ | ✔️ |
転送ノード | ❌ | ✔️ | ✔️ |
トランスファーレプリカ | ❌ | ✔️ | ✔️ |
データベースの作成 | ❌ | ❌ | ✔️ |
データベースの削除 | ❌ | ❌ | ✔️ |
フラッシュオール | ❌ | ✔️ | ✔️ |
特権グループの作成 | ❌ | ❌ | ✔️ |
特権グループの削除 | ❌ | ❌ | ✔️ |
特権グループのリスト | ❌ | ❌ | ✔️ |
特権グループの操作 | ❌ | ❌ | ✔️ |
手順
特権グループを作成し、その特権グループに特権を追加します。
特権グループの作成
次の例では、privilege_group_1
という名前の特権グループを作成する方法を示します。
from pymilvus import MilvusClient
client.create_privileg_group(group_name='privilege_group_1')
import io.milvus.v2.service.rbac.request.CreatePrivilegeGroupReq;
client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.CreatePrivilegeGroup(context.Background(), "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 io.milvus.v2.service.rbac.request.AddPrivilegesToGroupReq;
client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Arrays.asList("Query", "Search"))
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.AddPrivilegesToGroup(context.Background(), "privilege_group_1", []string{"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 io.milvus.v2.service.rbac.request.RemovePrivilegesFromGroupReq;
client.removePrivilegesFromGroup(RemovePrivilegesFromGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Collections.singletonList("Search"))
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.RemovePrivilegesFromGroup(context.Background(), "privilege_group_1", []string{"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 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();
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.ListPrivilegeGroups(context.Background())
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 io.milvus.v2.service.rbac.request.DropPrivilegeGroupReq;
client.dropPrivilegeGroup(DropPrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.DropPrivilegeGroup(context.Background(), "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"
}'