如何用Python开发Milvus向量数据库实现查询?

摘要:一、前置准备:环境与依赖 Milvus 环境要求 版本:milvus_2.6.9 Python 依赖安装 pip install pymilvus==2.5.0 二、核心知识点:Milvus RBAC 权限体系 核心概念 角色(Role):
一、前置准备:环境与依赖 Milvus 环境要求 版本:milvus_2.6.9 Python 依赖安装 pip install pymilvus==2.5.0 二、核心知识点:Milvus RBAC 权限体系 核心概念 角色(Role):权限的集合,如 test_role 权限(Privilege):具体操作权限,如 Insert/Search 作用对象:权限生效的范围,如 Collection/Database 权限粒度:集合级(核心)、数据库级、分区级 默认角色: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/ 老虎网盘资源