milvus-logo
LFAI
Home
  • Guide d'administration

Activer RBAC

En activant RBAC, vous pouvez contrôler l'accès à des ressources Milvus spécifiques (par exemple, une collection ou une partition) ou les autorisations en fonction du rôle et des privilèges de l'utilisateur. Actuellement, cette fonctionnalité n'est disponible qu'en Python et Java.

Cette rubrique décrit comment activer RBAC et gérer les utilisateurs et les rôles.

Les extraits de code de cette page utilisent le nouveau MilvusClient (Python) pour interagir avec Milvus. De nouveaux SDK MilvusClient pour d'autres langages seront publiés dans de futures mises à jour.

1. Lancer un client Milvus pour établir une connexion

Après avoir activé l'authentification utilisateur, connectez-vous à votre instance Milvus à l'aide de token qui se compose d'un nom d'utilisateur et d'un mot de passe. Par défaut, Milvus utilise l'utilisateur root avec le mot de passe 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. Créer un utilisateur

Créez un utilisateur nommé user_1 avec le mot de passe P@ssw0rd:

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

Après avoir créé un utilisateur, vous pouvez :

  • Mettre à jour le mot de passe d'un utilisateur. Vous devez fournir le mot de passe original et le nouveau mot de passe.
client.update_password(
    user_name='user_1',
    old_password='P@ssw0rd',
    new_password='P@ssw0rd123'
)
  • Dresser la liste de tous les utilisateurs.
client.list_users()

# output:
# ['root', 'user_1']
  • Vérifier le rôle d'un utilisateur particulier.
client.describe_user(user_name='user_1')

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

3. Créez un rôle

L'exemple suivant crée un rôle nommé roleA.

client.create_role(
    role_name="roleA",
)

Après avoir créé un rôle, vous pouvez

  • dresser la liste de tous les rôles.
client.list_roles()

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

4. Accorder un privilège à un rôle

L'exemple suivant montre comment accorder l'autorisation de rechercher toutes les collections au rôle nommé roleA.

L'adresse object_type spécifie le type d'objet, qui peut également être considéré comme le type de ressource. Actuellement, les valeurs valables sont Collection/User/Global, etc., où Global signifie qu'il n'y a pas de type de ressource spécifique. L'adresse object_name est le nom de la ressource. Si objecttypeest Collection, le nom de l'objet peut faire référence à un nom de collection spécifique, ou vous pouvez utiliser * pour spécifier toutes les collections. Sile type d'objet est Global, le nom de l'objet ne peut être spécifié que par *. Voir Utilisateurs et rôles pour connaître les autres types de privilèges que vous pouvez accorder.

Avant de gérer les privilèges des rôles, assurez-vous d'avoir activé l'authentification des utilisateurs. Dans le cas contraire, une erreur risque de se produire. Pour plus d'informations sur l'activation de l'authentification des utilisateurs, reportez-vous à la section Authentifier l'accès des utilisateurs.

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

Après avoir accordé un privilège à un rôle, vous pouvez

  • Afficher les privilèges accordés à un rôle.
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. Accorder un rôle à un utilisateur

Accorder le rôle à un utilisateur afin que celui-ci puisse hériter de tous les privilèges du rôle.

# grant a role to a user

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

Après avoir accordé le rôle, vérifiez qu'il a bien été accordé :

client.describe_user(
    user_name='user_1'
)

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

6. Révoquer des privilèges

Soyez prudent lorsque vous effectuez les opérations suivantes, car elles sont irréversibles.

  • Supprimer un privilège d'un rôle. Si vous révoquez un privilège qui n'a pas été accordé au rôle, une erreur se produit.
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'
)
  • Supprimer un utilisateur d'un rôle. Si vous révoquez un rôle qui n'a pas été accordé à l'utilisateur, une erreur se produit.
client.revoke_role(
    user_name='user_1',
    role_name='roleA'
)
  • Supprimer un rôle.
client.drop_role(role_name='roleA')
  • Supprimer un utilisateur.
client.drop_user(user_name='user_1')

Prochaines étapes

Traduit parDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Cette page a-t - elle été utile ?