Concessione di privilegi o gruppi di privilegi ai ruoli
Una volta creato un ruolo, è possibile concedere privilegi al ruolo. Questa guida illustra come concedere privilegi o gruppi di privilegi a un ruolo.
Assegnare un privilegio o un gruppo di privilegi a un ruolo
Milvus 2.5 introduce una nuova versione dell'API che semplifica l'operazione di assegnazione. Non è più necessario cercare il tipo di oggetto quando si concede un privilegio a un ruolo. Di seguito sono riportati i parametri e le relative spiegazioni.
nome_ruolo: il nome del ruolo di destinazione al quale devono essere concessi i privilegi o i gruppi di privilegi.
Risorsa: La risorsa di destinazione di un privilegio, che può essere un'istanza specifica, un database o una raccolta.
La tabella seguente spiega come specificare la risorsa nel metodo client.grantV2().
Livello |
Risorsa |
Metodo di concessione |
Note |
|---|---|---|---|
Collezione |
Una raccolta specifica |
|
Immettere il nome della raccolta di destinazione e il nome del database a cui appartiene la raccolta di destinazione. |
Tutte le raccolte sotto un database specifico |
|
Immettere il nome del database di destinazione e un carattere jolly |
|
Database |
Un database specifico |
|
Immettere il nome del database di destinazione e il carattere jolly |
Tutti i database dell'istanza corrente |
|
Immettere |
|
Istanza |
L'istanza corrente |
|
Immettere |
Privilegio: Il privilegio specifico o il gruppo di privilegi da concedere a un ruolo. Attualmente, Milvus offre 56 tipi di privilegi che possono essere concessi. La tabella seguente elenca i privilegi di Milvus.
La colonna del tipo nella tabella sottostante è utilizzata per facilitare la ricerca rapida dei privilegi ed è usata solo a scopo di classificazione. Quando si concedono privilegi, non è necessario comprendere i tipi. È sufficiente inserire i privilegi corrispondenti.
Tipo
Privilegio
Descrizione
Descrizione dell'API pertinente sul lato client
Privilegi del database
ElencoDatabase
Visualizza tutti i database dell'istanza corrente
DescriviDatabase
Visualizza i dettagli di un database
CreaDatabase
Crea un database
Abbandona il database
Eliminare un database
Alterare il database
Modifica le proprietà di un database
Privilegi di raccolta
GetFlushState
Controlla lo stato dell'operazione di lavaggio della raccolta
Stato di caricamento
Controlla lo stato di caricamento di una raccolta
OttieniProgressoCaricamento
Controlla l'avanzamento del caricamento di una collezione
Mostra collezioni
Visualizza tutte le raccolte con privilegi di raccolta
ElencaAliases
Visualizza tutti gli alias di una collezione
DescriviCollezione
Visualizza i dettagli di una collezione
DescriviAlias
Visualizza i dettagli di un alias
Ottieni statistiche
Ottenere le statistiche di una raccolta (ad esempio, il numero di entità in una raccolta)
CreaCollezione
Crea una collezione
Abbandona la collezione
Eliminare una collezione
Caricare
Carica una raccolta
Rilasciare
Rilascia una raccolta
Sciacquare
Persiste tutte le entità di una collezione in un segmento sigillato. Qualsiasi entità inserita dopo l'operazione di flush sarà memorizzata in un nuovo segmento.
Compattazione
Attiva manualmente la compattazione
RinominaCollezione
Rinomina una collezione
CreaAlias
Crea un alias per una collezione
EliminaAlias
Elimina l'alias di una collezione
ArrossisciTutti
Cancella tutte le raccolte in un database
Privilegi della partizione
HasPartition
Controlla se esiste una partizione
Mostra partizioni
Visualizza tutte le partizioni di un insieme
Crea partizione
Crea una partizione
Abbandona partizione
Eliminare una partizione
Privilegi degli indici
IndiceDettaglio
Visualizza i dettagli di un indice
CreaIndice
Creare un indice
Rilasciare l'indice
Eliminare un indice
Privilegi di gestione delle risorse
Bilanciamento del carico
Ottenere il bilanciamento del carico
Crea gruppo di risorse
Crea un gruppo di risorse
Abbandona il gruppo di risorse
Eliminare un gruppo di risorse
AggiornaGruppi di risorse
Aggiornare un gruppo di risorse
DescriviGruppoRisorse
Visualizza i dettagli di un gruppo di risorse
Elenco dei gruppi di risorse
Visualizza tutti i gruppi di risorse dell'istanza corrente
TrasferisciNodo
Trasferisce i nodi tra i gruppi di risorse
TrasferisciReplica
Trasferisce le repliche tra i gruppi di risorse
BackupRBAC
Crea un backup per tutte le operazioni relative a RBAC nell'istanza corrente
BackupRBAC
RipristinaRBAC
Ripristina un backup di tutte le operazioni relative a RBAC nell'istanza corrente
RipristinaRBAC
Privilegi dell'entità
Interrogazione
Eseguire una query
Ricerca
Eseguire una ricerca
Inserire
Inserire entità
Eliminare
Cancellare entità
Inserire
Inserisci entità
Importazione
Inserire o importare entità in blocco
Privilegi RBAC
CreaProprietà
Crea un utente o un ruolo
AggiornaUtente
Aggiorna la password di un utente
Eliminare la proprietà
Elimina la password di un utente o di un ruolo
SelezionaProprietà
Visualizza tutti gli utenti a cui è stato concesso un ruolo specifico
GestisciProprietà
Gestione di un utente o di un ruolo o concessione di un ruolo a un utente
SelezionaUtente
Visualizza tutti i ruoli concessi a un utente
Crea gruppo di privilegi
Crea un gruppo di privilegi
Elimina gruppo di privilegi
Eliminare un gruppo di privilegi
Elenco dei gruppi di privilegi
Visualizza tutti i gruppi di privilegi nell'istanza corrente
OperareGruppoPrivilegio
Aggiungere o rimuovere privilegi da un gruppo di privilegi
L'esempio seguente mostra come concedere il privilegio PrivilegeSearch su collection_01 sotto il database default e un gruppo di privilegi chiamato privilege_group_1 al ruolo role_a.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
client.grant_privilege_v2(
role_name="role_a",
privilege="Search",
collection_name='collection_01',
db_name='default',
)
client.grant_privilege_v2(
role_name="role_a",
privilege="privilege_group_1",
collection_name='collection_01',
db_name='default',
)
client.grant_privilege_v2(
role_name="role_a",
privilege="ClusterReadOnly",
collection_name='*',
db_name='*',
)
import io.milvus.v2.service.rbac.request.GrantPrivilegeReqV2
client.grantPrivilegeV2(GrantPrivilegeReqV2.builder()
.roleName("role_a")
.privilege("Search")
.collectionName("collection_01")
.dbName("default")
.build());
client.grantPrivilegeV2(GrantPrivilegeReqV2.builder()
.roleName("role_a")
.privilege("privilege_group_1")
.collectionName("collection_01")
.dbName("default")
.build());
client.grantPrivilegeV2(GrantPrivilegeReqV2.builder()
.roleName("role_a")
.privilege("ClusterReadOnly")
.collectionName("*")
.dbName("*")
.build());
import (
"context"
"fmt"
"github.com/milvus-io/milvus/client/v2/milvusclient"
)
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
client, err := milvusclient.New(ctx, &milvusclient.ClientConfig{
Address: "localhost:19530",
APIKey: "root:Milvus",
})
if err != nil {
fmt.Println(err.Error())
// handle error
}
defer client.Close(ctx)
err = client.GrantV2(ctx, milvusclient.NewGrantV2Option("role_a", "Search", "default", "collection_01"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
err = client.GrantV2(ctx, milvusclient.NewGrantV2Option("role_a", "privilege_group_1", "default", "collection_01"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
err = client.GrantV2(ctx, milvusclient.NewGrantV2Option("role_a", "ClusterReadOnly", "*", "*"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node")
const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});
await client.grantPrivilegeV2({
role: "role_a",
privilege: "Search"
collection_name: 'collection_01'
db_name: 'default',
});
await client.grantPrivilegeV2({
role: "role_a",
privilege: "privilege_group_1"
collection_name: 'collection_01'
db_name: 'default',
});
await client.grantPrivilegeV2({
role: "role_a",
privilege: "ClusterReadOnly"
collection_name: '*'
db_name: '*',
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/grant_privilege_v2" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a",
"privilege": "Search",
"collectionName": "collection_01",
"dbName":"default"
}'
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/grant_privilege_v2" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a",
"privilege": "privilege_group_1",
"collectionName": "collection_01",
"dbName":"default"
}'
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/grant_privilege_v2" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a",
"privilege": "ClusterReadOnly",
"collectionName": "*",
"dbName":"*"
}'
Descrivere un ruolo
L'esempio seguente mostra come visualizzare i privilegi concessi al ruolo role_a utilizzando il metodo describe_role.
from pymilvus import MilvusClient
client.describe_role(role_name="role_a")
import io.milvus.v2.service.rbac.response.DescribeRoleResp;
import io.milvus.v2.service.rbac.request.DescribeRoleReq
DescribeRoleReq describeRoleReq = DescribeRoleReq.builder()
.roleName("role_a")
.build();
DescribeRoleResp resp = client.describeRole(describeRoleReq);
List<DescribeRoleResp.GrantInfo> infos = resp.getGrantInfos();
import "github.com/milvus-io/milvus/client/v2/milvusclient"
role, err := client.DescribeRole(ctx, milvusclient.NewDescribeRoleOption("role_a"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
await client.describeRole({roleName: 'role_a'});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/describe" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a"
}'
Di seguito è riportato un esempio di output.
{
"role": "role_a",
"privileges": [
{
"collection_name": "collection_01",
"db_name": "default",
"role_name": "role_a",
"privilege": "Search",
"grantor_name": "root"
},
"privilege_group_1"
]
}
Revocare un privilegio o un gruppo di privilegi a un ruolo
L'esempio seguente mostra come revocare il privilegio PrivilegeSearch su collection_01 sotto il database default e il gruppo di privilegi privilege_group_1 che sono stati concessi al ruolo role_a.
client.revoke_privilege_v2(
role_name="role_a",
privilege="Search",
collection_name='collection_01',
db_name='default',
)
client.revoke_privilege_v2(
role_name="role_a",
privilege="privilege_group_1",
collection_name='collection_01',
db_name='default',
)
client.revoke_privilege_v2(
role_name="role_a",
privilege="ClusterReadOnly",
collection_name='*',
db_name='*',
)
import io.milvus.v2.service.rbac.request.RevokePrivilegeReqV2
client.revokePrivilegeV2(RevokePrivilegeReqV2.builder()
.roleName("role_a")
.privilege("Search")
.collectionName("collection_01")
.dbName("default")
.build());
client.revokePrivilegeV2(RevokePrivilegeReqV2.builder()
.roleName("role_a")
.privilege("privilege_group_1")
.collectionName("collection_01")
.dbName("default")
.build());
client.revokePrivilegeV2(RevokePrivilegeReqV2.builder()
.roleName("role_a")
.privilege("ClusterReadOnly")
.collectionName("*")
.dbName("*")
.build());
err = client.RevokePrivilegeV2(ctx, milvusclient.NewRevokePrivilegeV2Option("role_a", "Search", "collection_01").
WithDbName("default"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
err = client.RevokePrivilegeV2(ctx, milvusclient.NewRevokePrivilegeV2Option("role_a", "privilege_group_1", "collection_01").
WithDbName("default"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
err = client.RevokePrivilegeV2(ctx, milvusclient.NewRevokePrivilegeV2Option("role_a", "ClusterReadOnly", "*").
WithDbName("*"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
await client.revokePrivilegeV2({
role: 'role_a',
privilege: 'Search',
collection_name: 'collection_01',
db_name: 'default'
});
await client.revokePrivilegeV2({
role: 'role_a',
collection_name: 'collection_01',
privilege: 'Search',
db_name: 'default'
});
await client.revokePrivilegeV2({
role: 'role_a',
collection_name: '*',
privilege: 'ClusterReadOnly',
db_name: '*'
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/revoke_privilege_v2" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a",
"privilege": "Search",
"collectionName": "collection_01",
"dbName":"default"
}'
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/revoke_privilege_v2" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a",
"privilege": "Search",
"collectionName": "collection_01",
"dbName":"default"
}'
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/roles/revoke_privilege_v2" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"roleName": "role_a",
"privilege": "ClusterReadOnly",
"collectionName": "*",
"dbName":"*"
}'