Octroi de privilèges ou de groupes de privilèges à des rôles
Une fois qu'un rôle est créé, vous pouvez lui accorder des privilèges. Ce guide explique comment accorder des privilèges ou des groupes de privilèges à un rôle.
Octroi d'un privilège ou d'un groupe de privilèges à un rôle
Milvus 2.5 introduit une nouvelle version de l'API qui rationalise l'opération d'octroi. Il n'est plus nécessaire de rechercher le type d'objet lors de l'octroi d'un privilège à un rôle. Voici les paramètres et les explications correspondantes.
role_name : Le nom du rôle cible auquel le(s) privilège(s) ou le(s) groupe(s) de privilèges doit(vent) être accordé(s).
Ressource: La ressource cible d'un privilège, qui peut être une instance, une base de données ou une collection spécifique.
Le tableau suivant explique comment spécifier la ressource dans la méthode client.grantV2().
Niveau |
Ressource |
Méthode d'octroi |
Notes |
|---|---|---|---|
Collection |
Une collection spécifique |
|
Saisissez le nom de votre collection cible et le nom de la base de données à laquelle la collection cible appartient. |
Toutes les collections d'une base de données spécifique |
|
Saisissez le nom de votre base de données cible et un caractère générique |
|
Base de données |
Une base de données spécifique |
|
Saisissez le nom de votre base de données cible et un joker |
Toutes les bases de données de l'instance actuelle |
|
Saisissez |
|
Instance |
L'instance actuelle |
|
Saisissez |
Privilège: Le privilège spécifique ou le groupe de privilèges que vous devez accorder à un rôle. Actuellement, Milvus propose 56 types de privilèges que vous pouvez accorder. Le tableau ci-dessous répertorie les privilèges dans Milvus.
La colonne "type" du tableau ci-dessous est utilisée pour faciliter la recherche rapide des privilèges et n'est utilisée qu'à des fins de classification. Lors de l'octroi de privilèges, il n'est pas nécessaire de comprendre les types. Il vous suffit de saisir les privilèges correspondants.
Type de privilège
Privilège
Description de l'API
Description de l'API concernée du côté du client
Privilèges relatifs aux bases de données
Liste des bases de données
Affiche toutes les bases de données de l'instance actuelle
DescribeDatabase
Affiche les détails d'une base de données
CreateDatabase
Créer une base de données
DropDatabase
Déposer une base de données
Modifier une base de données
Modifier les propriétés d'une base de données
Privilèges de collecte
GetFlushState
Vérifier l'état de l'opération de vidage de la collection
GetLoadState
Vérifier l'état de chargement d'une collection
GetLoadingProgress
Vérifier la progression du chargement d'une collection
ShowCollections
Afficher toutes les collections avec des privilèges de collection
ListAliases
Afficher tous les alias d'une collection
DescribeCollection
Affiche les détails d'une collection
DescribeAlias
Affiche les détails d'un alias
Obtenir des statistiques
Obtenir les statistiques d'une collection (par exemple, le nombre d'entités dans une collection)
Créer une collection
Créer une collection
DropCollection
Déposer une collection
Charger
Charger une collection
Libération
Libérer une collection
Rincer
Persiste toutes les entités d'une collection dans un segment scellé. Toute entité insérée après l'opération de vidage sera stockée dans un nouveau segment.
Compaction
Déclencher manuellement le compactage
Renommer une collection
Renommer une collection
Créer un alias
Créer un alias pour une collection
DropAlias
Supprimer l'alias d'une collection
FlushAll
Vide toutes les collections d'une base de données
Privilèges des partitions
HasPartition
Vérifier l'existence d'une partition
ShowPartitions
Afficher toutes les partitions d'une collection
CreatePartition
Créer une partition
Déposer une partition
Déposer une partition
Privilèges de l'index
Détails de l'index
Afficher les détails d'un index
Créer un index
Créer un index
Déposer un index
Supprimer un index
Privilèges de gestion des ressources
Équilibre de charge
Réaliser l'équilibre de la charge
Créer un groupe de ressources
Créer un groupe de ressources
DropResourceGroup
Supprimer un groupe de ressources
Mettre à jour les groupes de ressources
Mettre à jour un groupe de ressources
DescribeResourceGroup
Afficher les détails d'un groupe de ressources
ListResourceGroups
Affiche tous les groupes de ressources de l'instance actuelle
TransferNode
Transférer des nœuds entre des groupes de ressources
TransferReplica
Transférer des répliques entre groupes de ressources
BackupRBAC
Créer une sauvegarde de toutes les opérations liées à RBAC dans l'instance actuelle
BackupRBAC
RestoreRBAC
Restauration d'une sauvegarde de toutes les opérations liées à RBAC dans l'instance actuelle
RestoreRBAC
Privilèges de l'entité
Requête
Effectuer une requête
Recherche
Effectuer une recherche
Insérer
Insérer des entités
Supprimer
Supprimer des entités
Insérer
Suppression d'entités
Importer
Insérer ou importer des entités en masse
Privilèges RBAC
Créer un propriétaire
Créer un utilisateur ou un rôle
UpdateUser
Mettre à jour le mot de passe d'un utilisateur
Abandonner la propriété
Supprimer le mot de passe d'un utilisateur ou d'un rôle
Sélectionner la propriété
Afficher tous les utilisateurs auxquels un rôle spécifique a été attribué
Gérer la propriété
Gérer un utilisateur ou un rôle ou accorder un rôle à un utilisateur
SelectUser
Afficher tous les rôles attribués à un utilisateur
CreatePrivilegeGroup
Créer un groupe de privilèges
DropPrivilegeGroup
Supprimer un groupe de privilèges
ListPrivilegeGroups
Afficher tous les groupes de privilèges dans l'instance courante
OperatePrivilegeGroup
Ajouter ou retirer des privilèges à un groupe de privilèges
L'exemple suivant montre comment accorder le privilège PrivilegeSearch à collection_01 sous la base de données default ainsi qu'un groupe de privilèges nommé privilege_group_1 au rôle 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":"*"
}'
Décrire un rôle
L'exemple suivant montre comment afficher les privilèges accordés au rôle role_a à l'aide de la méthode 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"
}'
Voici un exemple de résultat.
{
"role": "role_a",
"privileges": [
{
"collection_name": "collection_01",
"db_name": "default",
"role_name": "role_a",
"privilege": "Search",
"grantor_name": "root"
},
"privilege_group_1"
]
}
Révoquer un privilège ou un groupe de privilèges d'un rôle
L'exemple suivant montre comment révoquer le privilège PrivilegeSearch sur collection_01 sous la base de données default ainsi que le groupe de privilèges privilege_group_1 qui ont été accordés au rôle 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":"*"
}'