Abilitare RBAC
Abilitando il RBAC, è possibile controllare l'accesso a risorse specifiche di Milvus (ad esempio una collezione o una partizione) o i permessi in base al ruolo e ai privilegi dell'utente. Attualmente questa funzione è disponibile solo in Python e Java.
Questo argomento descrive come abilitare RBAC e gestire utenti e ruoli.
I frammenti di codice di questa pagina utilizzano il nuovo MilvusClient (Python) per interagire con Milvus. I nuovi SDK MilvusClient per altri linguaggi saranno rilasciati nei prossimi aggiornamenti.
1. Avviare un client Milvus per stabilire una connessione
Dopo aver abilitato l'autenticazione dell'utente, ci si connette all'istanza di Milvus usando token
che consiste in un nome utente e una password. Per impostazione predefinita, Milvus utilizza l'utente root
con la password 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. Creare un utente
Create un utente chiamato user_1
con la password P@ssw0rd
:
client.create_user(
user_name='user_1',
password='P@ssw0rd'
)
Dopo aver creato un utente, è possibile:
- Aggiornare la password di un utente. È necessario fornire sia la password originale che quella nuova.
client.update_password(
user_name='user_1',
old_password='P@ssw0rd',
new_password='P@ssw0rd123'
)
- Elencare tutti gli utenti.
client.list_users()
# output:
# ['root', 'user_1']
- Controllare il ruolo di un particolare utente.
client.describe_user(user_name='user_1')
# output:
# {'user_name': 'user_1', 'roles': ()}
3. Creare un ruolo
L'esempio seguente crea un ruolo denominato roleA
.
client.create_role(
role_name="roleA",
)
Dopo aver creato un ruolo, è possibile:
- Elencare tutti i ruoli.
client.list_roles()
# output:
# ['admin', 'public', 'roleA']
4. Concedere un privilegio a un ruolo
L'esempio seguente mostra come concedere il permesso di ricerca in tutte le raccolte al ruolo roleA
.
object_type
specifica il tipo di oggetto, che può essere inteso anche come tipo di risorsa. Attualmente, i valori validi sono Collezione/Utente/Globale, ecc., dove Globale significa che non esiste un tipo di risorsa specifico. object_name
è il nome della risorsa. Se objecttypeè Collection, il nome dell'oggetto può essere riferito a un nome di raccolta specifico, oppure si può usare * per specificare tutte le raccolte. Seiltipo di oggettoè Globale, il nome dell'oggetto può essere specificato solo come *. Vedere Utenti e ruoli per altri tipi di privilegi che si possono concedere.
Prima di gestire i privilegi dei ruoli, assicurarsi di aver abilitato l'autenticazione degli utenti. In caso contrario, potrebbe verificarsi un errore. Per informazioni su come abilitare l'autenticazione dell'utente, fare riferimento a Autenticare l'accesso dell'utente.
# 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'
)
Dopo aver concesso un privilegio a un ruolo, è possibile:
- Visualizzare i privilegi concessi a un ruolo.
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. Assegnare un ruolo a un utente
Assegnare il ruolo a un utente in modo che questo possa ereditare tutti i privilegi del ruolo.
# grant a role to a user
client.grant_role(
user_name='user_1',
role_name='roleA'
)
Dopo aver concesso il ruolo, verificare che sia stato concesso:
client.describe_user(
user_name='user_1'
)
# output:
# {'user_name': 'user_1', 'roles': ('roleA')}
6. Revocare i privilegi
Prestare attenzione quando si eseguono le seguenti operazioni, perché sono irreversibili.
- Rimuovere un privilegio da un ruolo. Se si revoca un privilegio che non è stato concesso al ruolo, si verifica un errore.
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'
)
- Rimuovere un utente da un ruolo. Se si revoca un ruolo che non è stato concesso all'utente, si verifica un errore.
client.revoke_role(
user_name='user_1',
role_name='roleA'
)
- Eliminare un ruolo.
client.drop_role(role_name='roleA')
- Eliminare un utente.
client.drop_user(user_name='user_1')
Cosa succede dopo
Imparare a gestire l'autenticazione degli utenti.
Imparare ad abilitare il proxy TLS in Milvus.