Milvus 数据访问控制

问题描述 投票:0回答:1

我正在使用 milvusDB 并寻求提供订阅模型,并面临提供有效的方法来提供数据访问控制。

我计划在 Milvus 建立一个藏书,总共包含 1,000 本书。我的目的是提供三个级别的访问权限:白银级、黄金级和高级级。白银级订阅者最多可以访问 100 本书,黄金级订阅者的限制为 500 本书,高级订阅者将有权访问所有书籍的完整收藏。

我目前正在探索实现这种结构的方法,但遇到了挑战。在考虑集合内的多租户和分区时,我意识到这些方法可能会导致不必要的数据重复。

我将非常感谢任何有关如何有效设置该系统的帮助或建议。

partitioning access-control role-based-access-control vector-database milvus
1个回答
0
投票

不确定这是否是最佳解决方案,但我会向架构添加一个字段来定义实体的访问级别。假设该字段的类型为 Integer,有 3 个可用值:

  • 0 如果银级或更高级别可以访问该书
  • 1 如果这本书可以通过黄金级或更高级别访问
  • 2 如果该书可由高级级别访问

我将按如下方式创建集合:

from pymilvus import (
    connections,
    utility,
    FieldSchema, CollectionSchema, DataType,
    Collection,
)


connections.connect(
        alias="default",
        host="localhost",
        port="19530",
    )
fields = [
        FieldSchema(name="pk", dtype=DataType.INT64, is_primary=True, auto_id=True),
        FieldSchema(name="access_level", dtype=DataType.INT8),
        FieldSchema(name="embeddings", dtype=DataType.FLOAT_VECTOR, dim=512)
    ]
collection = Collection("books")

最后,在搜索过程中,我们传递进行搜索的用户的访问级别:

def search_books(query_embedding, access_level: int):
    collection.search(
        data=[query_embedding],
        anns_field="embeddings",
        param={"metric_type": "IP"},
        expr=f"access_level <= {access_level}"
    )
© www.soinside.com 2019 - 2024. All rights reserved.