milvus-logo
LFAI
Home
  • Guía de administración

Habilitar RBAC

Habilitando RBAC, puede controlar el acceso a recursos específicos de Milvus (Ej. una colección o una partición) o permisos basados en el rol y privilegios del usuario. Actualmente, esta característica sólo está disponible en Python y Java.

Este tema describe cómo habilitar RBAC y gestionar usuarios y roles.

Los fragmentos de código de esta página utilizan el nuevo MilvusClient (Python) para interactuar con Milvus. En futuras actualizaciones se publicarán nuevos SDK de MilvusClient para otros lenguajes.

1. Inicie un cliente Milvus para establecer una conexión

Después de habilitar la autenticación de usuario, conéctese a su instancia Milvus utilizando token que consiste en un nombre de usuario y una contraseña. Por defecto, Milvus utiliza el usuario root con la contraseña 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. Cree un usuario

Cree un usuario llamado user_1 con la contraseña P@ssw0rd:

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

Después de crear un usuario, puede:

  • Actualizar la contraseña de un usuario. Debe proporcionar tanto la contraseña original como la nueva.
client.update_password(
    user_name='user_1',
    old_password='P@ssw0rd',
    new_password='P@ssw0rd123'
)
  • Listar todos los usuarios.
client.list_users()

# output:
# ['root', 'user_1']
  • Comprobar el rol de un usuario en particular.
client.describe_user(user_name='user_1')

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

3. Crear un rol

El siguiente ejemplo crea un rol llamado roleA.

client.create_role(
    role_name="roleA",
)

Después de crear un rol, puede:

  • Listar todos los roles.
client.list_roles()

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

4. 4. Conceder un privilegio a un rol

El siguiente ejemplo muestra cómo conceder el permiso de búsqueda en todas las colecciones al rol denominado roleA.

En object_type se especifica el tipo de objeto, que también puede entenderse como el tipo de recurso. Actualmente, los valores válidos incluyen Colección/Usuario/Global, etc., donde Global significa que no hay un tipo de recurso específico. object_name es el nombre del recurso. Si objecttypees Collection, entonces el nombre del objeto puede referirse a un nombre de colección específico, o puede utilizar * para especificar todas las colecciones. Si objecttypees Global, entonces el nombre del objeto sólo puede especificarse como *. Consulte Usuarios y roles para conocer otros tipos de privilegios que puede conceder.

Antes de gestionar privilegios de rol, asegúrese de que ha activado la autenticación de usuario. De lo contrario, puede producirse un error. Para obtener información sobre cómo activar la autenticación de usuarios, consulte Autenticar el acceso de usuarios.

# 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'
)

Después de conceder un privilegio a un rol, puede:

  • Ver los privilegios concedidos a un rol.
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. Conceder un rol a un usuario

Conceder el rol a un usuario para que éste pueda heredar todos los privilegios del rol.

# grant a role to a user

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

Después de conceder el rol, verificar que se ha concedido:

client.describe_user(
    user_name='user_1'
)

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

6. Revocar privilegios

Tenga cuidado al realizar las siguientes operaciones, ya que son irreversibles.

  • Eliminar un privilegio de un rol. Si revoca un privilegio que no se ha concedido al rol, se producirá un error.
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'
)
  • Eliminar un usuario de un rol. Si revoca un rol que no ha sido concedido al usuario, se producirá un error.
client.revoke_role(
    user_name='user_1',
    role_name='roleA'
)
  • Eliminar un rol.
client.drop_role(role_name='roleA')
  • Dar de baja a un usuario.
client.drop_user(user_name='user_1')

A continuación

Traducido porDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?