Creare un gruppo di privilegi
Per semplificare il processo di concessione dei privilegi, si consiglia di combinare più privilegi in un gruppo di privilegi.
Gruppo di privilegi vs. privilegi
Un gruppo di privilegi è costituito da più privilegi.
Gruppo di privilegi illustrato
Come mostrato nella figura precedente, supponiamo di dover concedere tre diversi privilegi a un ruolo.
Se non si utilizza un gruppo di privilegi, è necessario concedere i privilegi tre volte.
Se si utilizza un gruppo di privilegi, è sufficiente creare un gruppo di privilegi e aggiungere i tre privilegi a questo gruppo di privilegi e concedere il gruppo di privilegi al ruolo A.
Utilizzando un gruppo di privilegi, è possibile concedere più privilegi in blocco a un ruolo.
Gruppi di privilegi integrati
Per facilitare l'uso, Milvus fornisce un totale di 9 privilegi incorporati a livello di raccolta, database e istanza: COLL_RO, COLL_RW, COLL_ADMIN, DB_RO, DB_RW, DB_Admin, Cluster_RO, Cluster_RW e Cluster_Admin.
I tre livelli di gruppi di privilegi integrati non hanno una relazione a cascata. L'impostazione di un gruppo di privilegi a livello di istanza non imposta automaticamente le autorizzazioni per tutti i database e le raccolte sotto quell'istanza. I privilegi a livello di database e di raccolta devono essere impostati manualmente.
Le tabelle seguenti illustrano i privilegi inclusi in ciascun gruppo di privilegi incorporato.
Livello di raccolta
CollectionReadOnly (COLL_RO): include i privilegi di lettura dei dati della raccolta.
CollectionReadWrite (COLL_RW): include i privilegi di lettura e scrittura dei dati della raccolta.
CollectionAdmin (COLL_ADMIN): include i privilegi di lettura e scrittura dei dati della raccolta e di gestione delle raccolte.
La tabella seguente elenca i privilegi specifici inclusi nei tre gruppi di privilegi integrati a livello di raccolta:
Privilegio |
RaccoltaSolo lettura |
RaccoltaLeggiScrivi |
Amministratore della raccolta |
|---|---|---|---|
Interrogazione |
✔️ |
✔️ |
✔️ |
Ricerca |
✔️ |
✔️ |
✔️ |
IndiceDettaglio |
✔️ |
✔️ |
✔️ |
GetFlushState |
✔️ |
✔️ |
✔️ |
Ottieni lo stato di caricamento |
✔️ |
✔️ |
✔️ |
Ottenere l'avanzamento del caricamento |
✔️ |
✔️ |
✔️ |
HasPartition |
✔️ |
✔️ |
✔️ |
MostraPartizioni |
✔️ |
✔️ |
✔️ |
ElencoAlias |
✔️ |
✔️ |
✔️ |
DescriviCollezione |
✔️ |
✔️ |
✔️ |
DescrivereAlias |
✔️ |
✔️ |
✔️ |
OttieniStatistiche |
✔️ |
✔️ |
✔️ |
CreaIndice |
❌ |
✔️ |
✔️ |
Rilasciare l'indice |
❌ |
✔️ |
✔️ |
CreaPartizione |
❌ |
✔️ |
✔️ |
AbbandonaPartizione |
❌ |
✔️ |
✔️ |
Carico |
❌ |
✔️ |
✔️ |
Rilascio |
❌ |
✔️ |
✔️ |
Inserire |
❌ |
✔️ |
✔️ |
Cancellare |
❌ |
✔️ |
✔️ |
Inserisci |
❌ |
✔️ |
✔️ |
Importazione |
❌ |
✔️ |
✔️ |
Sciacquare |
❌ |
✔️ |
✔️ |
Compattazione |
❌ |
✔️ |
✔️ |
Bilanciamento del carico |
❌ |
✔️ |
✔️ |
CreaAlias |
❌ |
❌ |
✔️ |
EliminaAlias |
❌ |
❌ |
✔️ |
Livello del database
DatabaseReadOnly (DB_RO): include i privilegi di lettura dei dati del database
DatabaseReadWrite (DB_RW): include i privilegi di lettura e scrittura dei dati del database.
DatabaseAdmin (DB_Admin): include i privilegi di lettura e scrittura dei dati del database e la gestione dei database.
La tabella seguente elenca i privilegi specifici inclusi nei tre gruppi di privilegi integrati a livello di database:
Privilegio |
DatabaseSolo lettura |
DatabaseLeggiScrivi |
DatabaseAdmin |
|---|---|---|---|
Mostra collezioni |
✔️ |
✔️ |
✔️ |
DescriviDatabase |
✔️ |
✔️ |
✔️ |
CreaCollezione |
✔️ |
✔️ |
✔️ |
AbbandonaCollezione |
❌ |
❌ |
✔️ |
Alterare il database |
❌ |
✔️ |
✔️ |
Livello cluster
ClusterReadOnly (Cluster_RO): include i privilegi di lettura dei dati dell'istanza
ClusterReadWrite (Cluster_RW): include i privilegi di lettura e scrittura dei dati dell'istanza
ClusterAdmin (Cluster_Admin): include i privilegi di lettura e scrittura dei dati di istanza e di gestione delle istanze.
La tabella seguente elenca i privilegi specifici inclusi nei tre gruppi di privilegi integrati a livello di istanza:
Privilegio |
ClusterSoloLettura |
ClusterLeggiScrivi |
ClusterAdmin |
|---|---|---|---|
ElencoDatabase |
✔️ |
✔️ |
✔️ |
RinominaCollezione |
❌ |
❌ |
✔️ |
CreaProprietà |
❌ |
❌ |
✔️ |
AggiornaUtente |
❌ |
❌ |
✔️ |
AbbandonaProprietà |
❌ |
❌ |
✔️ |
SelezionaProprietà |
✔️ |
✔️ |
✔️ |
GestisciProprietà |
❌ |
❌ |
✔️ |
SelezionaUtente |
✔️ |
✔️ |
✔️ |
BackupRBAC |
❌ |
❌ |
✔️ |
RipristinoRBAC |
❌ |
❌ |
✔️ |
CreaGruppoRisorse |
❌ |
❌ |
✔️ |
AbbandonaGruppoRisorse |
❌ |
❌ |
✔️ |
AggiornaGruppiRisorse |
❌ |
✔️ |
✔️ |
DescriviGruppoRisorse |
✔️ |
✔️ |
✔️ |
ElencoGruppiRisorse |
✔️ |
✔️ |
✔️ |
TrasferimentoNodo |
❌ |
✔️ |
✔️ |
TrasferimentoReplica |
❌ |
✔️ |
✔️ |
CreaDatabase |
❌ |
❌ |
✔️ |
AbbandonaDatabase |
❌ |
❌ |
✔️ |
RisciacquareTutti |
❌ |
✔️ |
✔️ |
CreaGruppoPrivilegi |
❌ |
❌ |
✔️ |
Abbandona GruppoPrivilegio |
❌ |
❌ |
✔️ |
ElencoGruppiPrivilegio |
❌ |
❌ |
✔️ |
OperareGruppoPrivilegio |
❌ |
❌ |
✔️ |
Procedure
È possibile creare un gruppo di privilegi e quindi aggiungere privilegi al gruppo di privilegi.
Creare un gruppo di privilegi
L'esempio seguente mostra come creare un gruppo di privilegi denominato privilege_group_1.
from pymilvus import MilvusClient
client.create_privilege_group(group_name='privilege_group_1')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.CreatePrivilegeGroup(ctx, milvusclient.NewCreatePrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.CreatePrivilegeGroupReq;
client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
await client.createPrivilegeGroup({
group_name: 'privilege_group_1',
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/create" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'
Aggiungere privilegi a un gruppo di privilegi
L'esempio seguente mostra come aggiungere i privilegi PrivilegeBackupRBAC e PrivilegeRestoreRBAC al gruppo di privilegi privilege_group_1 appena creato.
from pymilvus import MilvusClient
client.add_privileges_to_group(group_name='privilege_group_1', privileges=['Query', 'Search'])
import "github.com/milvus-io/milvus/client/v2/milvusclient"
privileges := []string{"Query", "Search"}
err = client.AddPrivilegesToGroup(ctx, milvusclient.NewAddPrivilegesToGroupOption("privilege_group_1", privileges...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.AddPrivilegesToGroupReq;
client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Arrays.asList("Query", "Search"))
.build());
await client.addPrivilegesToGroup({
group_name: privilege_group_1,
privileges: ['Query', 'Search'],
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/add_privileges_to_group" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Query", "Search"]
}'
Rimuovere i privilegi da un gruppo di privilegi
L'esempio seguente mostra come rimuovere il privilegio PrivilegeRestoreRBAC dal gruppo di privilegi privilege_group_1.
from pymilvus import MilvusClient
client.remove_privileges_from_group(group_name='privilege_group_1', privileges='Search')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.RemovePrivilegesFromGroup(ctx, milvusclient.NewRemovePrivilegesFromGroupOption("privilege_group_1", []string{"Search"}...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.RemovePrivilegesFromGroupReq;
client.removePrivilegesFromGroup(RemovePrivilegesFromGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Collections.singletonList("Search"))
.build());
await client.removePrivilegesFromGroup({
group_name: "privilege_group_1",
privileges: ["Search"],
});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/remove_privileges_from_group" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Search"]
}'
Elencare i gruppi di privilegi
L'esempio seguente mostra come elencare tutti i gruppi di privilegi esistenti.
from pymilvus import MilvusClient
client.list_privilege_groups()
import "github.com/milvus-io/milvus/client/v2/milvusclient"
groups, err := client.ListPrivilegeGroups(ctx, milvusclient.NewListPrivilegeGroupsOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.PrivilegeGroup;
import io.milvus.v2.service.rbac.request.ListPrivilegeGroupsReq;
import io.milvus.v2.service.rbac.response.ListPrivilegeGroupsResp;
ListPrivilegeGroupsResp resp = client.listPrivilegeGroups(ListPrivilegeGroupsReq.builder()
.build());
List<PrivilegeGroup> groups = resp.getPrivilegeGroups();
await client.listPrivilegeGroups();
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{}'
Di seguito è riportato un esempio di output.
PrivilegeGroupItem: <privilege_group:privilege_group_1>, <privileges:('Search', 'Query')>
Eliminare un gruppo di privilegi
L'esempio seguente mostra come eliminare il gruppo di privilegi privilege_group_1.
from pymilvus import MilvusClient
client.drop_privilege_group(group_name='privilege_group_1')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.DropPrivilegeGroup(ctx, milvusclient.NewDropPrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.DropPrivilegeGroupReq;
client.dropPrivilegeGroup(DropPrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
await client.dropPrivilegeGroup({group_name: 'privilege_group_1'});
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/drop" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'