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.
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
COLL_RO: comprend les privilèges de lecture des données de la collection.
COLL_RW: comprend les privilèges de lecture et d'écriture des données de la collection.
COLL_ADMIN: comprend les privilèges de lecture et d'écriture des données de collecte 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** | CollecteLectureSeulement** **CollectionReadOnly** | **CollecteLectureEcriture** | **Administrateur de collection |
---|---|---|---|
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
DB_RO: comprend les privilèges de lecture des données de la base de données
DB_RW: comprend les privilèges de lecture et d'écriture des données de la base de données.
DB_Admin: comprend les 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** | **Lecture de la base de données uniquement **Lecture de la base de données en écriture | Base de données en lecture seule** **Base de données en lecture-écriture** | **Base de donnéesAdmin** |
---|---|---|---|
Afficher les collections | ✔️ | ✔️ | ✔️ |
DescribeDatabase | ✔️ | ✔️ | ✔️ |
CreateCollection | ❌ | ❌ | ✔️ |
DropCollection | ❌ | ❌ | ✔️ |
AlterDatabase | ❌ | ✔️ | ✔️ |
Niveau du cluster
Cluster_RO: inclut les privilèges de lecture des données d'instance
Cluster_RW: comprend les privilèges de lecture et d'écriture des données d'instance.
Cluster_Admin: comprend les privilèges de lecture et d'écriture des données d'instance et de gestion 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** | ClusterReadWrite **ClusterReadOnly **ClusterReadWrite **ClusterAdmin **ClusterAdmin | **ClusterAdmin** |
---|---|---|---|
ListDatabases | ✔️ | ✔️ | ✔️ |
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 d'autorisations d'accès nommé privilege_group_1
.
from pymilvus import MilvusClient
client.create_privileg_group(group_name='privilege_group_1')
import io.milvus.v2.service.rbac.request.CreatePrivilegeGroupReq;
client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.CreatePrivilegeGroup(context.Background(), "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"
}'
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 io.milvus.v2.service.rbac.request.AddPrivilegesToGroupReq;
client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Arrays.asList("Query", "Search"))
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.AddPrivilegesToGroup(context.Background(), "privilege_group_1", []string{"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"]
}'
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 io.milvus.v2.service.rbac.request.RemovePrivilegesFromGroupReq;
client.removePrivilegesFromGroup(RemovePrivilegesFromGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Collections.singletonList("Search"))
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.RemovePrivilegesFromGroup(context.Background(), "privilege_group_1", []string{"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"]
}'
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 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();
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.ListPrivilegeGroups(context.Background())
curl --request POST \
--url "${CLUSTER_ENDPOINT}/v2/vectordb/privilege_groups/list" \
--header "Authorization: Bearer ${TOKEN}" \
--header "Content-Type: application/json" \
-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 io.milvus.v2.service.rbac.request.DropPrivilegeGroupReq;
client.dropPrivilegeGroup(DropPrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.DropPrivilegeGroup(context.Background(), "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"
}'