milvus-logo
LFAI
Casa
  • Guida all'amministrazione

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

Tradotto daDeepL

Try Managed Milvus for Free

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

Get Started
Feedback

Questa pagina è stata utile?