milvus-logo
LFAI
首页
  • 管理指南
    • 安全

启用 RBAC

通过启用 RBAC,可以根据用户角色和权限控制对特定 Milvus 资源(如集合或分区)或权限的访问。目前,该功能仅在 Python 和 Java 中可用。

本主题介绍如何启用 RBAC 并管理用户和角色

本页的代码片段使用新的MilvusClient(Python)与 Milvus 进行交互。用于其他语言的新 MilvusClient SDK 将在未来更新中发布。

1.启动 Milvus 客户端建立连接

启用用户身份验证后,使用token (由用户名和密码组成)连接到 Milvus 实例。默认情况下,Milvus 使用root 用户和密码Milvus

from pymilvus import MilvusClient

client = MilvusClient(
    uri='http://localhost:19530', # replace with your own Milvus server address
    token='root:Milvus' # replace with your own Milvus server token
)

2.创建用户

创建一个名为user_1 的用户,密码为P@ssw0rd

client.create_user(
    user_name='user_1',
    password='P@ssw0rd'
)

创建用户后,您可以

  • 更新用户密码。您需要提供原始密码和新密码。
client.update_password(
    user_name='user_1',
    old_password='P@ssw0rd',
    new_password='P@ssw0rd123'
)
  • 列出所有用户。
client.list_users()

# output:
# ['root', 'user_1']
  • 检查某个用户的角色。
client.describe_user(user_name='user_1')

# output:
# {'user_name': 'user_1', 'roles': ()}

3.创建角色

下面的示例创建了一个名为roleA 的角色。

client.create_role(
    role_name="roleA",
)

创建角色后,您可以

  • 列出所有角色。
client.list_roles()

# output:
# ['admin', 'public', 'roleA']

4.向角色授予权限

下面的示例演示了如何向名为roleA 的角色授予搜索所有收藏的权限。

object_type 指定对象类型,也可以理解为资源类型。目前,有效值包括集合/用户/全局等,其中全局表示没有特定的资源类型。object_name 是资源名称。如果对象类型为 Collection,那么对象名称可以指特定的集合名称,也可以使用 * 来指定所有集合。如果对象类型为全局,则只能用 * 指定对象名称。有关可以授予的其他权限类型,请参阅用户和角色

在管理角色权限之前,请确保已启用用户身份验证。否则可能会出错。有关如何启用用户身份验证信息,请参阅验证用户访问

# grant privilege to a role

client.grant_privilege(
    role_name='roleA',
    object_type='User',  # value here can be Global, Collection or User, object type also depends on the API defined in privilegeName
    object_name='user_1',  # value here can be * or a specific user name if object type is 'User'
    privilege='SelectUser'
)

向角色授予权限后,您可以

  • 查看授予角色的权限。
client.describe_role(
    role_name='roleA'
)

# output:
# {'role': 'roleA',
#  'privileges': [{'object_type': 'User',
#    'object_name': 'user_1',
#    'db_name': 'default',
#    'role_name': 'roleA',
#    'privilege': 'SelectUser',
#    'grantor_name': 'root'}]}

5.向用户授予角色

向用户授予角色,使该用户可以继承角色的所有权限。

# grant a role to a user

client.grant_role(
    user_name='user_1',
    role_name='roleA'
)

授予角色后,验证角色是否已授予:

client.describe_user(
    user_name='user_1'
)

# output:
# {'user_name': 'user_1', 'roles': ('roleA')}

6.撤销权限

执行以下操作时要谨慎,因为这些操作是不可逆的。

  • 从角色中删除权限。如果撤销的权限尚未授予角色,则会出现错误。
client.revoke_privilege(
    role_name='roleA',
    object_type='User',  # value here can be Global, Collection or User, object type also depends on the API defined in privilegeName
    object_name='user_1',  # value here can be * or a specific user name if object type is 'User'
    privilege='SelectUser'
)
  • 从角色中删除用户。如果撤销未授予用户的角色,将发生错误。
client.revoke_role(
    user_name='user_1',
    role_name='roleA'
)
  • 删除角色。
client.drop_role(role_name='roleA')
  • 删除用户。
client.drop_user(user_name='user_1')

下一步

翻译自DeepLogo

反馈

此页对您是否有帮助?