Créer un groupe de privilèges

Pour rationaliser le processus d'octroi des privilèges, il est recommandé de regrouper plusieurs privilèges dans un groupe de privilèges.

Groupe de privilèges et privilèges

Un groupe de privilèges se compose de plusieurs privilèges.

Privilege Group Illustrated Illustration d'un groupe de privilèges

Comme le montre la figure ci-dessus, supposons que vous deviez accorder trois privilèges différents à un rôle.

  • Si vous n'utilisez pas de groupe de privilèges, vous devez accorder les privilèges trois fois.

  • Si vous utilisez un groupe de privilèges, il vous suffit de créer un groupe de privilèges, d'y ajouter les trois privilèges et d'accorder le groupe de privilèges au rôle A.

L'utilisation d'un groupe de privilèges permet d'accorder plusieurs privilèges en bloc à un rôle.

Groupes de privilèges intégrés

Pour faciliter l'utilisation, Milvus fournit un total de 9 privilèges intégrés au niveau de la collection, de la base de données et de l'instance : COLL_RO, COLL_RW, COLL_ADMIN, DB_RO, DB_RW, DB_Admin, Cluster_RO, Cluster_RW et Cluster_Admin.

Les trois niveaux de groupes de privilèges intégrés n'ont pas de relation en cascade. La définition d'un groupe de privilèges au niveau de l'instance ne définit pas automatiquement les autorisations pour toutes les bases de données et collections de cette instance. Les privilèges au niveau de la base de données et de la collection doivent être définis manuellement.

Les tableaux suivants expliquent les privilèges inclus dans chacun des groupes de privilèges intégrés.

Niveau de collection

  • CollectionReadOnly (COLL_RO): inclut les privilèges de lecture des données de la collection.

  • CollectionReadWrite (COLL_RW): inclut les privilèges de lecture et d'écriture des données de la collection.

  • CollectionAdmin (COLL_ADMIN): comprend les privilèges de lecture et d'écriture des données de la collection et de gestion des collections.

Le tableau ci-dessous répertorie les privilèges spécifiques inclus dans les trois groupes de privilèges intégrés au niveau de la collecte :

Privilège

CollectionReadOnly

CollectionReadWrite

CollectionAdmin

Requête

✔️

✔️

✔️

Recherche

✔️

✔️

✔️

Détails de l'index

✔️

✔️

✔️

GetFlushState

✔️

✔️

✔️

GetLoadState

✔️

✔️

✔️

GetLoadingProgress

✔️

✔️

✔️

HasPartition

✔️

✔️

✔️

ShowPartitions

✔️

✔️

✔️

ListAliases

✔️

✔️

✔️

DescribeCollection

✔️

✔️

✔️

DescribeAlias

✔️

✔️

✔️

Obtenir des statistiques

✔️

✔️

✔️

CreateIndex

✔️

✔️

DropIndex

✔️

✔️

CreatePartition

✔️

✔️

DropPartition

✔️

✔️

Chargement

✔️

✔️

Release

✔️

✔️

Insert

✔️

✔️

Supprimer

✔️

✔️

Upsert

✔️

✔️

Importation

✔️

✔️

Flush

✔️

✔️

Compaction

✔️

✔️

Équilibre des charges

✔️

✔️

CreateAlias

✔️

DropAlias

✔️

Niveau de la base de données

  • DatabaseReadOnly (DB_RO): comprend les privilèges de lecture des données de la base de données.

  • DatabaseReadWrite (DB_RW): comprend les privilèges de lecture et d'écriture des données de la base de données.

  • DatabaseAdmin (DB_Admin): privilèges de lecture et d'écriture des données de la base et de gestion des bases de données.

Le tableau ci-dessous répertorie les privilèges spécifiques inclus dans les trois groupes de privilèges intégrés au niveau de la base de données :

Privilège

Base de donnéesLecture seule

Base de donnéesLectureÉcriture

Administrateur de base de données

Afficher les collections

✔️

✔️

✔️

DescribeDatabase

✔️

✔️

✔️

Créer une collection

✔️

✔️

✔️

DropCollection

✔️

AlterDatabase

✔️

✔️

Niveau du cluster

  • ClusterReadOnly (Cluster_RO): inclut les privilèges de lecture des données d'instance.

  • ClusterReadWrite (Cluster_RW): inclut des privilèges de lecture et d'écriture des données d'instance.

  • ClusterAdmin (Cluster_Admin): privilèges permettant de lire et d'écrire des données d'instance et de gérer des instances.

Le tableau ci-dessous répertorie les privilèges spécifiques inclus dans les trois groupes de privilèges intégrés au niveau de l'instance :

Privilège

ClusterReadOnly

ClusterReadWrite

ClusterAdmin

Liste des bases de données

✔️

✔️

✔️

RenameCollection

✔️

Créer une propriété

✔️

UpdateUser

✔️

DropOwnership

✔️

Sélectionner la propriété

✔️

✔️

✔️

Gérer la propriété

✔️

SelectUser

✔️

✔️

✔️

BackupRBAC

✔️

RestoreRBAC

✔️

Créer un groupe de ressources

✔️

DropResourceGroup

✔️

UpdateResourceGroups

✔️

✔️

DescribeResourceGroup

✔️

✔️

✔️

ListResourceGroups

✔️

✔️

✔️

TransferNode

✔️

✔️

TransferReplica

✔️

✔️

CreateDatabase

✔️

DropDatabase

✔️

FlushAll

✔️

✔️

CreatePrivilegeGroup

✔️

DropPrivilegeGroup

✔️

ListPrivilegeGroups

✔️

OperatePrivilegeGroup

✔️

Procédures

Vous pouvez créer un groupe de privilèges, puis ajouter des privilèges au groupe de privilèges.

Création d'un groupe de privilèges

L'exemple suivant montre comment créer un groupe de privilèges nommé 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" \
--header "Request-Timeout: 10" \
-d '{
    "privilegeGroupName":"privilege_group_1"
}'

Ajouter des privilèges à un groupe de privilèges

L'exemple suivant montre comment ajouter les privilèges PrivilegeBackupRBAC et PrivilegeRestoreRBAC au groupe de privilèges privilege_group_1 qui vient d'être créé.

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" \
--header "Request-Timeout: 10" \
-d '{
    "privilegeGroupName":"privilege_group_1",
    "privileges":["Query", "Search"]
}'

Supprimer des privilèges d'un groupe de privilèges

L'exemple suivant montre comment supprimer le privilège PrivilegeRestoreRBAC du groupe de privilèges 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" \
--header "Request-Timeout: 10" \
-d '{
    "privilegeGroupName":"privilege_group_1",
    "privileges":["Search"]
}'

Répertorier les groupes de privilèges

L'exemple suivant montre comment dresser la liste de tous les groupes de privilèges existants.

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" \
--header "Request-Timeout: 10" \
-d '{}'

Voici un exemple de résultat.

PrivilegeGroupItem: <privilege_group:privilege_group_1>, <privileges:('Search', 'Query')>

Supprimer un groupe de privilèges

L'exemple suivant montre comment supprimer le groupe de privilèges 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" \
--header "Request-Timeout: 10" \
-d '{
    "privilegeGroupName":"privilege_group_1"
}'