AI开发-python-milvus向量数据库(2-3 -milvus角色)

一、前置准备:环境与依赖

 
  1. Milvus 环境要求
    • 版本:milvus_2.6.9 
  2. Python 依赖安装
  3. pip install pymilvus==2.5.0

 

二、核心知识点:Milvus RBAC 权限体系

 

  1. 核心概念
    • 角色(Role):权限的集合,如 test_role
    • 权限(Privilege):具体操作权限,如 Insert/Search
    • 作用对象:权限生效的范围,如 Collection/Database
     
  2. 权限粒度:集合级(核心)、数据库级、分区级
  3. 默认角色:root(超级管理员,拥有所有权限)

三、实战操作:角色与权限管理(Python 实现)

 
1. 连接 Milvus(带权限认证)
 
  • 核心函数:connections.connect()
  • 关键参数:uri(服务地址)、token(用户名密码)、db_name(指定数据库)
  • 注意:未指定 db_name 时默认连接 default 数据库
 
2. 角色管理:创建 / 删除角色
 
  • 实例化 Role 对象:role = Role("test_role")
  • 创建角色:role.create()(需 root 权限,重复创建会报错)
  • 删除角色:role.drop()(谨慎操作,删除后角色关联权限全部失效)
 
3. 权限操作:授予 / 收回权限
 
  • 授予权限:role.grant(对象类型, 对象名称, 具体权限)
    • 示例:role.grant("Collection", "*", "Insert")(给角色授予所有集合的插入权限)
    • 通配符:* 表示 “所有”,可替换为具体集合名(如 "user_vector")
     
  • 收回权限:role.revoke(对象类型, 对象名称, 具体权限)
    • 示例:role.revoke("Collection", "*", "Insert")
     
 
4. 权限查询:校验权限配置
 
  • 全量查询:role.list_grants()(查看角色的所有权限)
  • 精准查询:role.list_grant(对象类型, 对象名称)(仅查看指定类型权限)
  • 应用场景:权限配置后校验、问题排查
 
5. 核心清单:Milvus 集合级所有可配置权限
 
  • 分类讲解权限:
    • 集合管理:CreateCollection/DropCollection 等
    • 数据操作:Insert/Search/Query 等
    • 索引管理:CreateIndex/DropIndex 等
    • 分区管理:CreatePartition/DropPartition 等
     
  • 注意点:删除角色时,需要先将该角色的权限都收回,否则会报错

看代码实现:

# 过滤 pymilvus 依赖的 pkg_resources 废弃警告(setuptools≥81 版本触发)
import warnings
warnings.filterwarnings("ignore", message=".*pkg_resources is deprecated as an API.*")

# 导入 Milvus Python 客户端核心模块
# connections:用于连接 Milvus 服务
# Role:用于 Milvus 角色与权限管理(RBAC 权限体系)
from pymilvus import connections, Role

def connect_to_milvus(db_name="default"):
    """
    连接 Milvus 向量数据库
    :param db_name: 要连接的数据库名称,默认使用 Milvus 内置的 default 数据库
    :return: None
    注意:
    1. uri 格式为 http://<ip>:<port>,Milvus 2.x 默认端口 19530
    2. token 格式为 <用户名>:<密码>,默认管理员账号 root,密码需替换为实际值(示例为 Milvus)
    3. 若未指定 db_name,默认连接 default 数据库
    """
    print(f"开始连接 Milvus 数据库,目标数据库:{db_name}\n")
    try:
        # 建立 Milvus 连接
        connections.connect(
            uri="http://192.168.211.128:19530",  # Milvus 服务地址
            token="root:Milvus",                  # 认证令牌(用户名密码)
            db_name=db_name                      # 指定连接的数据库
        )
        print("Milvus 连接成功!")
    except Exception as e:
        print(f"Milvus 连接失败:{e}")
        raise  # 抛出异常,便于排查问题

# 1. 执行数据库连接(默认连接 default 数据库)
# 注意:若 Milvus 未开启权限控制(authorization.enabled=false),token 参数可省略
connect_to_milvus()

# 2. 角色管理核心操作(基于 RBAC 权限体系)
# 实例化 Role 对象,指定要操作的角色名称
role = Role("test_role")

try:
    # 创建自定义角色(若角色已存在会抛出异常,生产环境建议加异常捕获)
    role.create()
    print("角色 test_role 创建成功!")
except Exception as e:
    if "already exists" in str(e):
        print(f"角色 test_role 已存在:{e}")
    else:
        raise

# 3. 为角色授予权限
# grant 方法参数说明:
# 第一个参数:权限作用对象类型(Collection/ Database/ Role/ Partition 等)
# 第二个参数:作用对象名称(* 表示所有集合,也可指定具体集合名如 "user_vector")
# 第三个参数:具体权限(如 Insert/ Search/ Query 等)
role.grant("Collection", "*", "Insert")
print("\n===== 角色 test_role 的所有权限 =====")
# list_grants():查询角色的全部权限(返回所有类型权限的列表)
print(role.list_grants())

print("\n===== 仅集合(Collection)相关权限 =====")
# list_grant():精准查询指定类型/指定对象的权限
# 参数1:权限类型(Collection),参数2:对象名称(* 所有集合)
print(role.list_grant("Collection", "*"))

# 4. 收回权限(注释状态,取消注释即可执行)
# role.revoke("Collection", "*", "Insert")
# print("\n===== 收回 Insert 权限后,角色的所有权限 =====")
# print(role.list_grants())

# 5. Milvus 集合(Collection)相关的所有可配置权限清单
# 覆盖集合的创建、删除、索引、查询、插入等全生命周期操作
all_privileges = [
    "CreateCollection", "DropCollection", "DescribeCollection", "ShowCollections",
    "LoadCollection", "ReleaseCollection", "Insert", "Search", "Query",
    "Flush", "Compact", "GetStatistics", "CreatePartition", "DropPartition",
    "HasPartition", "LoadPartitions", "ReleasePartitions", "CreateIndex",
    "DropIndex", "DescribeIndex", "ShowIndexes"
]
print("\n===== Milvus 集合级所有可配置权限 =====")
print(all_privileges)

 数据结果:

开始连接 Milvus 数据库,目标数据库:default

Milvus 连接成功!
角色 test_role 创建成功!

===== 角色 test_role 的所有权限 =====
GrantInfo groups:
- GrantItem: <object:Collection>, <object_name:*>, <db_name:default>, <role_name:test_role>, <grantor_name:root>, <privilege:Insert>

===== 仅集合(Collection)相关权限 =====
GrantInfo groups:
- GrantItem: <object:Collection>, <object_name:*>, <db_name:default>, <role_name:test_role>, <grantor_name:root>, <privilege:Insert>

===== Milvus 集合级所有可配置权限 =====
['CreateCollection', 'DropCollection', 'DescribeCollection', 'ShowCollections', 'LoadCollection', 'ReleaseCollection', 'Insert', 'Search', 'Query', 'Flush', 'Compact', 'GetStatistics', 'CreatePartition', 'DropPartition', 'HasPartition', 'LoadPartitions', 'ReleasePartitions', 'CreateIndex', 'DropIndex', 'DescribeIndex', 'ShowIndexes']

更多学习资料尽在老虎网盘资源:http://resources.kittytiger.cn/ 老虎网盘资源

posted @ 2026-02-12 11:21  万笑佛  阅读(132)  评论(0)    收藏  举报