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
Aprenda a gestionar la autenticación de usuarios.
Aprenda a habilitar el proxy TLS en Milvus.