如何用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/
老虎网盘资源
