创建权限组
为简化授予权限的流程,建议将多个权限合并为一个权限组。
特权组与特权
特权组由多个特权组成。
特权组示例
如上图所示,假设需要向一个角色授予三种不同的权限。
如果不使用特权组,则需要授予三次权限。
如果使用特权组,则只需创建一个特权组并将三种特权添加到该特权组中,然后将该特权组授予角色 A。
通过使用特权组,可以向角色批量授予多项特权。
内置特权组
为方便使用,Milvus 在 Collections、数据库和实例级别上提供了共 9 个内置特权:COLL_RO、COLL_RW、COLL_ADMIN、DB_RO、DB_RW、DB_Admin、Cluster_RO、Cluster_RW 和 Cluster_Admin。
内置特权组的三个级别没有级联关系。在实例级别设置特权组不会自动为该实例下的所有数据库和 Collections 设置权限。数据库和集合级别的权限需要手动设置。
下表解释了每个内置权限组所包含的权限。
Collection 级别
COLL_RO:包括读取 Collections 数据的权限
COLL_RW:包括读取和写入 Collections 数据的权限
COLL_ADMIN:包括读写收集数据和管理收集的权限。
下表列出了集合级三个内置权限组所包含的具体权限。
**权限** | **只读集合** | **只读** | **集合管理员** |
---|---|---|---|
查询 | ✔️ | ✔️ | ✔️ |
搜索 | ✔️ | ✔️ | ✔️ |
索引详情 | ✔️ | ✔️ | ✔️ |
获取冲洗状态 | ✔️ | ✔️ | ✔️ |
获取加载状态 | ✔️ | ✔️ | ✔️ |
获取加载进度 | ✔️ | ✔️ | ✔️ |
HasPartition | ✔️ | ✔️ | ✔️ |
显示分区 | ✔️ | ✔️ | ✔️ |
列出别名 | ✔️ | ✔️ | ✔️ |
描述集合 | ✔️ | ✔️ | ✔️ |
描述别名 | ✔️ | ✔️ | ✔️ |
获取统计数据 | ✔️ | ✔️ | ✔️ |
创建索引 | ❌ | ✔️ | ✔️ |
删除索引 | ❌ | ✔️ | ✔️ |
创建分区 | ❌ | ✔️ | ✔️ |
删除分区 | ❌ | ✔️ | ✔️ |
加载 | ❌ | ✔️ | ✔️ |
发布 | ❌ | ✔️ | ✔️ |
插入 | ❌ | ✔️ | ✔️ |
删除 | ❌ | ✔️ | ✔️ |
增加 | ❌ | ✔️ | ✔️ |
进口 | ❌ | ✔️ | ✔️ |
同花顺 | ❌ | ✔️ | ✔️ |
压实 | ❌ | ✔️ | ✔️ |
负载平衡 | ❌ | ✔️ | ✔️ |
创建别名 | ❌ | ❌ | ✔️ |
删除别名 | ❌ | ❌ | ✔️ |
数据库级别
DB_RO:包括读取数据库数据的权限
DB_RW:包括读取和写入数据库数据的权限
DB_Admin:包括读写数据库数据和管理数据库的权限。
下表列出了数据库级三个内置权限组所包含的具体权限。
**权限** | **只读数据库** | **数据库读写** | **数据库管理** |
---|---|---|---|
显示收藏 | ✔️ | ✔️ | ✔️ |
描述数据库 | ✔️ | ✔️ | ✔️ |
创建集合 | ❌ | ❌ | ✔️ |
删除收藏 | ❌ | ❌ | ✔️ |
更改数据库 | ❌ | ✔️ | ✔️ |
群集级别
Cluster_RO:包括读取实例数据的权限
Cluster_RW:包括读取和写入实例数据的权限
Cluster_Admin:包括读写实例数据和管理实例的权限。
下表列出了实例级三个内置权限组所包含的具体权限。
**权限** | **只读群集** | 只读** 群集读写** | **群集管理员** |
---|---|---|---|
列出数据库 | ✔️ | ✔️ | ✔️ |
重命名收藏 | ❌ | ❌ | ✔️ |
创建所有权 | ❌ | ❌ | ✔️ |
更新用户 | ❌ | ❌ | ✔️ |
删除所有者 | ❌ | ❌ | ✔️ |
选择所有权 | ✔️ | ✔️ | ✔️ |
管理所有权 | ❌ | ❌ | ✔️ |
选择用户 | ✔️ | ✔️ | ✔️ |
备份 | ❌ | ❌ | ✔️ |
还原 RBAC | ❌ | ❌ | ✔️ |
创建资源组 | ❌ | ❌ | ✔️ |
删除资源组 | ❌ | ❌ | ✔️ |
更新资源组 | ❌ | ✔️ | ✔️ |
描述资源组 | ✔️ | ✔️ | ✔️ |
ListResourceGroups | ✔️ | ✔️ | ✔️ |
传输节点 | ❌ | ✔️ | ✔️ |
传输复制 | ❌ | ✔️ | ✔️ |
创建数据库 | ❌ | ❌ | ✔️ |
删除数据库 | ❌ | ❌ | ✔️ |
冲洗全部 | ❌ | ✔️ | ✔️ |
创建权限组 | ❌ | ❌ | ✔️ |
删除特权组 | ❌ | ❌ | ✔️ |
ListPrivilegeGroups | ❌ | ❌ | ✔️ |
操作特权组 | ❌ | ❌ | ✔️ |
操作步骤
可以创建权限组,然后向权限组添加权限。
创建权限组
下面的示例演示了如何创建名为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"
}'
向特权组添加权限
下面的示例演示了如何将PrivilegeBackupRBAC
和PrivilegeRestoreRBAC
添加到刚刚创建的特权组privilege_group_1
中。
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"
}'