RBAC aktivieren
Wenn Sie RBAC aktivieren, können Sie den Zugriff auf bestimmte Milvus-Ressourcen (z. B. eine Sammlung oder eine Partition) oder Berechtigungen auf der Grundlage von Benutzerrollen und Privilegien steuern. Derzeit ist diese Funktion nur in Python und Java verfügbar.
Dieses Thema beschreibt, wie man RBAC aktiviert und Benutzer und Rollen verwaltet.
Die Codeschnipsel auf dieser Seite verwenden den neuen MilvusClient (Python) zur Interaktion mit Milvus. Neue MilvusClient SDKs für andere Sprachen werden in zukünftigen Updates veröffentlicht.
1. Initiieren Sie einen Milvus-Client, um eine Verbindung herzustellen
Nachdem Sie die Benutzerauthentifizierung aktiviert haben, verbinden Sie sich mit Ihrer Milvus-Instanz über token
, das aus einem Benutzernamen und einem Passwort besteht. Standardmäßig verwendet Milvus den Benutzer root
mit dem Passwort 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. Erstellen Sie einen Benutzer
Erstellen Sie einen Benutzer mit dem Namen user_1
und dem Passwort P@ssw0rd
:
client.create_user(
user_name='user_1',
password='P@ssw0rd'
)
Nachdem Sie einen Benutzer angelegt haben, können Sie:
- Ein Benutzerpasswort aktualisieren. Sie müssen sowohl das ursprüngliche als auch das neue Kennwort angeben.
client.update_password(
user_name='user_1',
old_password='P@ssw0rd',
new_password='P@ssw0rd123'
)
- Alle Benutzer auflisten.
client.list_users()
# output:
# ['root', 'user_1']
- Die Rolle eines bestimmten Benutzers überprüfen.
client.describe_user(user_name='user_1')
# output:
# {'user_name': 'user_1', 'roles': ()}
3. Erstellen Sie eine Rolle
Im folgenden Beispiel wird eine Rolle mit dem Namen roleA
erstellt.
client.create_role(
role_name="roleA",
)
Nachdem Sie eine Rolle erstellt haben, können Sie:
- Alle Rollen auflisten.
client.list_roles()
# output:
# ['admin', 'public', 'roleA']
4. Einer Rolle ein Privileg erteilen
Das folgende Beispiel zeigt, wie Sie der Rolle roleA
das Recht erteilen, alle Sammlungen zu durchsuchen.
Die object_type
gibt den Objekttyp an, der auch als Ressourcentyp verstanden werden kann. Derzeit sind die Werte Sammlung/Benutzer/Global usw. gültig, wobei Global bedeutet, dass es keinen spezifischen Ressourcentyp gibt. Die object_name
ist der Name der Ressource. Wenn objecttypeCollection ist, kann sich der Objektname auf einen bestimmten Sammlungsnamen beziehen, oder Sie können * verwenden, um alle Sammlungen anzugeben. Wenn objecttypeGlobal ist, kann der Objektname nur mit * angegeben werden. Unter Benutzer und Rollen finden Sie weitere Arten von Berechtigungen, die Sie vergeben können.
Vergewissern Sie sich vor der Verwaltung von Rollenberechtigungen, dass Sie die Benutzerauthentifizierung aktiviert haben. Andernfalls kann ein Fehler auftreten. Informationen zur Aktivierung der Benutzerauthentifizierung finden Sie unter Authentifizierung des Benutzerzugriffs.
# 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'
)
Nachdem Sie einer Rolle eine Berechtigung gewährt haben, können Sie:
- Die einer Rolle gewährten Berechtigungen anzeigen.
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. Einem Benutzer eine Rolle gewähren
Die Rolle einem Benutzer gewähren, so dass dieser Benutzer alle Privilegien der Rolle erben kann.
# grant a role to a user
client.grant_role(
user_name='user_1',
role_name='roleA'
)
Überprüfen Sie nach der Vergabe der Rolle, ob sie vergeben wurde:
client.describe_user(
user_name='user_1'
)
# output:
# {'user_name': 'user_1', 'roles': ('roleA')}
6. Entziehen von Privilegien
Seien Sie vorsichtig, wenn Sie die folgenden Operationen durchführen, da diese Operationen nicht rückgängig gemacht werden können.
- Entziehen Sie ein Privileg aus einer Rolle. Wenn Sie ein Privileg entziehen, das der Rolle nicht gewährt wurde, tritt ein Fehler auf.
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'
)
- Entfernen Sie einen Benutzer aus einer Rolle. Wenn Sie eine Rolle widerrufen, die dem Benutzer nicht gewährt wurde, tritt ein Fehler auf.
client.revoke_role(
user_name='user_1',
role_name='roleA'
)
- Eine Rolle löschen.
client.drop_role(role_name='roleA')
- Löschen eines Benutzers.
client.drop_user(user_name='user_1')
Was kommt als nächstes?
Lernen Sie, wie Sie die Benutzerauthentifizierung verwalten.
Erfahren Sie, wie Sie den TLS-Proxy in Milvus aktivieren können.