当前位置: 首页 > article >正文

Milvus - 基于角色的访问控制(RBAC)

本文介绍了 Milvus 中的基于角色的访问控制(RBAC)机制,详细说明了 RBAC 的关键组成部分,包括用户、角色、对象和权限之间的关系,以及如何通过角色管理资源访问权限。

1. 概念概述

在 Milvus 中实现资源访问控制时,了解 RBAC 的关键概念非常重要。这些概念包括对象类型、对象名称、用户、角色和权限。

对象类型

对象类型是指被授予权限的对象类别,主要有以下几种:

  • Global:全局对象,允许用户执行影响所有集合、用户或全系统设置的操作。
  • Collection:特定集合对象,允许用户在特定集合内执行创建索引、插入数据、查询等操作。
  • User:与用户管理相关的对象,允许用户管理数据库用户的凭证和角色,如更新用户凭证或查看用户详细信息。

对象名称

对象名称用于指定具体的访问对象。对象名称的规则如下:

  • 若对象类型为 Global,对象名称应设为通配符 *,表示所有该类型的对象。
  • 若对象类型为 Collection,对象名称为集合的具体名称。
  • 若对象类型为 User,对象名称为数据库用户的名称。

用户

用户是与 Milvus 交互的个人或应用程序,需提供用户名和密码。用户无法直接获得权限,而是通过分配的角色继承权限。

权限

权限定义了可以执行的操作和可访问的资源。权限不直接授予用户,而是授予角色,由角色来分配给用户。

角色

角色是权限的集合,用于定义用户对某些对象所拥有的权限。当角色分配给用户时,该用户就继承了该角色的所有权限。

2. 实例:授予角色权限

以下是一些具体的权限授予实例,帮助更好地理解如何通过代码控制权限。

实例 1:授予用户对所有集合的查询权限

假设有一个角色 DataAnalyst,我们希望该角色能够对所有集合执行查询操作。代码如下:

milvusClient.grant_privilege(
    role_name="DataAnalyst",
    object_type="Collection",  
    privilege="Query",       
    object_name="*"  # 使用通配符 "*" 表示所有集合
)

实例 2:授予用户对单个集合的插入和删除权限

假设一个角色 Editor 需要对某个特定集合 UserCollection 执行插入和删除操作:

# 授予插入权限
milvusClient.grant_privilege(
    role_name="Editor",
    object_type="Collection",  
    privilege="Insert",        
    object_name="UserCollection"
)

# 授予删除权限
milvusClient.grant_privilege(
    role_name="Editor",
    object_type="Collection",  
    privilege="Delete",        
    object_name="UserCollection"
)

实例 3:授予用户对全系统的管理权限

假设一个角色 AdminManager 需要具备对所有用户和角色进行管理的权限。此时,我们可以针对全局对象设置如下权限:

# 授予创建角色权限
milvusClient.grant_privilege(
    role_name="AdminManager",
    object_type="Global",
    privilege="CreateRole",
    object_name="*"
)

# 授予删除角色权限
milvusClient.grant_privilege(
    role_name="AdminManager",
    object_type="Global",
    privilege="DeleteRole",
    object_name="*"
)

# 授予管理用户权限
milvusClient.grant_privilege(
    role_name="AdminManager",
    object_type="User",
    privilege="UpdateUser",
    object_name="*"
)

在 Milvus 的 RBAC 体系中,并没有直接的“组”的概念,但可以通过将用户与角色绑定来实现类似组的权限管理。通过将用户分配给特定角色,可以实现将用户加入“组”的效果,因为角色定义了可以访问的对象和权限。

将用户加入角色的步骤

以下是将用户加入某个角色的步骤和示例代码:

  1. 创建角色(如果角色尚未存在):
    先创建一个角色,可以理解为创建一个“组”。该角色将包含一组权限。

    milvusClient.create_role(role_name="DataAnalyst")
    
  2. 授予角色权限
    为这个角色授予所需权限。可以通过 grant_privilege 方法将权限赋予角色,以定义“组”的权限。

    milvusClient.grant_privilege(
        role_name="DataAnalyst",
        object_type="Collection",
        privilege="Query",
        object_name="*"
    )
    
  3. 将用户添加到角色
    将用户分配到指定角色,让用户继承该角色的权限。这相当于将用户加入“组”中。

    milvusClient.add_user_to_role(
        username="user123",
        role_name="DataAnalyst"
    )
    

注意事项

  • 一个用户可以绑定多个角色:如果用户需要多个“组”的权限,可以将用户添加到多个角色。

  • 角色的权限继承:用户加入角色后,会自动继承该角色所拥有的权限。

  • 删除用户与角色的绑定:如果需要移除用户的某些权限,可以使用 remove_user_from_role 方法解除用户与角色的绑定:

    milvusClient.remove_user_from_role(
        username="user123",
        role_name="DataAnalyst"
    )
    

通过这些步骤,您可以灵活地将用户添加到不同的角色中,实现分组管理的效果。

3. 默认用户和角色

Milvus 默认创建了一个 root 用户,默认密码为 Milvus。该用户拥有 admin 权限,可以访问所有资源并执行所有操作。

如果用户被分配了 public 角色,则可以获得以下权限:

  • DescribeCollection
  • ShowCollections
  • IndexDetail

4. 对象类型和权限列表

启用 RBAC 后,可为不同对象类型指定的权限如下表所示。

对象类型权限名称客户端相关 API 说明
CollectionCreateIndex创建索引
CollectionDropIndex删除索引
CollectionIndexDetailDescribeIndex/GetIndexState/GetIndexBuildProgress
CollectionLoad加载集合/获取加载进度/获取加载状态
CollectionInsert插入
CollectionDelete删除
CollectionSearch搜索
CollectionFlush冲洗/获取冲洗状态
CollectionQuery查询
CollectionGetStatistics获取集合统计信息
CollectionCompact压缩
CollectionImport批量导入
CollectionBalanceLoad负载平衡
GlobalAll APIs拥有所有 API 操作权限
GlobalCreateCollection创建集合
GlobalDropCollection删除集合
GlobalDescribeCollection描述集合
GlobalListCollections显示集合
GlobalClearAll清除所有数据
GlobalCreateRole创建角色
GlobalDeleteRole删除角色
UserUpdateUser更新用户凭证
UserSelectUser查询用户信息

**注意:**对象和权限名称区分大小写。若希望向某类对象(如集合、全局、用户)授予所有权限,可在权限名称中使用 "*"

5. 小结

Milvus 的 RBAC 机制通过用户、角色、对象和权限的关系,实现了灵活且高效的访问控制。RBAC 机制不仅支持对集合和全局对象的管理,还支持细化到具体的用户管理。在实践中,通过合理的角色划分和权限配置,可以确保 Milvus 资源的安全性和高效性。

通过本文,您已了解了 RBAC 的基本结构以及在 Milvus 中如何实现基于角色的权限管理。


http://www.kler.cn/a/376639.html

相关文章:

  • 太速科技-712-6U VPX飞腾处理器刀片计算机
  • git 入门作业
  • 电脑没有下载声卡驱动怎么办?电脑声卡驱动安装方法
  • 【Hello World 】
  • (56)MATLAB分析码间串扰信道的传递函数与频率响应
  • 移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (2) - 移植 nanovg
  • transformers 框架使用详解,bert-base-chinese
  • 网页自动化测试和爬虫:Selenium库入门与进阶
  • C++教程(004):程序流程结构之选择结构
  • GB/T 28046.3-2011 道路车辆 电气及电子设备的环境条件和试验 第3部分:机械负荷(1)
  • 免费插件集-illustrator插件-Ai插件-闭合开放路径
  • 设计师赵霂萱:以卓越设计让 Harmony Garden Workspace 荣膺国际大奖
  • Java 集合一口气讲完!(上)||o(*°▽°*)o|Ю [有人吗?]
  • JAVA 基础-多态
  • 2024年第四届“网鼎杯”网络安全大赛-赛前模拟训练
  • DNS服务部署
  • Java网络通信
  • 从0开始学python-day17-数据结构2
  • layui 实现 城市联动
  • git cherry-pick用法详解
  • 顺序表和链表(一)
  • jmeter结合ansible分布式压测--准备工作
  • 深入了解嵌入式硬件设计
  • 视频智能分析平台LiteAIServer入侵检测算法平台部署行人入侵检测算法:智能安防的新利器
  • 钉钉内集成第三方免密登录(Vue+.Net)
  • 定制化视频生成新模范!零样本主体驱动,精确运动控制!复旦阿里等发布DreamVideo-2