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 |
---|---|---|---|
Collecte | Une collection spécifique | client.grant_privilege_v2(role_name="roleA", privilege="CollectionAdmin", collection_name="col1", db_name="db1") | 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 | client.grant_privilege_v2(role_name="roleA", privilege="CollectionAdmin", collection_name="*", db_name="db1") | 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 | client.grant_privilege_v2(role_name="roleA", privilege="DatabaseAdmin", collection_name="*", db_name="db1") | Saisissez le nom de votre base de données cible et un caractère générique |
Toutes les bases de données de l'instance actuelle | client.grant_privilege_v2(role_name="roleA", privilege="DatabaseAdmin", collection_name="*", db_name="*") | Saisissez | |
**Instance** | L'instance actuelle | client.grant_privilege_v2(role_name="roleA", privilege="ClusterAdmin", collection_name="*", db_name="*") | 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 ** | **Privilège** | **Description | **Description de l'API correspondante 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 | [DescribeDatabase](https://milvus.io/docs/manage_databases.md) | |
CreateDatabase (Créer une base de données) | Créer une base de données | [CreateDatabase](https://milvus.io/docs/manage_databases.md) | |
DropDatabase | Supprimer une base de données | ||
AlterDatabase | 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 | [GetFlushState](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/Collection/flush.md) |
GetLoadState | Vérifie l'état de chargement d'une collection | ||
GetLoadingProgress | Vérifier la progression du chargement d'une collection | [GetLoadingProgress](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/utility/loading_progress.md) | |
ShowCollections | Afficher toutes les collections avec les privilèges de collection | [ShowCollections](https://milvus.io/docs/view-collections.md) | |
ListAliases | Affiche 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). | ||
CreateCollection (Créer une collection) | Créer une collection | [CreateCollection](https://milvus.io/docs/create-collection.md) | |
DropCollection | Déposer une collection | ||
Charger | Charger une collection | [LoadCollection](https://milvus.io/docs/load-and-release.md)/[GetLoadingProgress](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/utility/loading_progress.md)/[GetLoadState](https://milvus.io/api-reference/restful/v2.5.x/v2/Collection%20(v2)/Get%20Load%20State.md) | |
Libération | Libérer une collection | [ReleaseCollection](https://milvus.io/docs/load-and-release.md) | |
Flush | 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. | [Flush](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/Collection/flush.md)/[GetFlushState](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/Collection/flush.md) | |
Compactage | Déclencher manuellement le compactage | ||
Renommer une collection | Renommer une collection | [RenameCollection](https://milvus.io/docs/modify-collection.md) | |
CreateAlias | 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 | [FlushAll](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/utility/flush_all.md) | |
Privilèges des partitions | HasPartition | Vérifier l'existence d'une partition | |
ShowPartitions | Afficher toutes les partitions d'une collection | [ShowPartitions](https://milvus.io/docs/manage-partitions.md) | |
Créer une partition | Créer une partition | [CreatePartition](https://milvus.io/docs/manage-partitions.md) | |
Déposer une partition | Déposer une partition | [DropPartition](https://milvus.io/docs/manage-partitions.md) | |
Privilèges de l'index | Détails de l'index | Voir les détails d'un index | |
Créer un index | Créer un index | [CreateIndex](https://milvus.io/docs/index-vector-fields.md?tab=floating) | |
DropIndex | Supprimer un index | [DropIndex](https://milvus.io/docs/index-vector-fields.md?tab=floating) | |
Privilèges de gestion des ressources | Équilibre de charge | Réaliser l'équilibre de la charge | |
CreateResourceGroup | Créer un groupe de ressources | ||
DropResourceGroup | Supprimer un groupe de ressources | [DropResourceGroup](https://milvus.io/docs/resource_group.md) | |
UpdateResourceGroups (Mise à jour des groupes de ressources) | Mettre à jour un groupe de ressources | [UpdateResourceGroups](https://milvus.io/docs/resource_group.md) | |
DescribeResourceGroup | Affiche les détails d'un groupe de ressources | [DescribeResourceGroup](https://milvus.io/docs/resource_group.md) | |
ListResourceGroups | Affiche tous les groupes de ressources de l'instance actuelle | [ListResourceGroups](https://milvus.io/docs/resource_group.md) | |
TransferNode | Transférer des nœuds entre les groupes de ressources | ||
TransferReplica | Transférer les répliques entre les groupes de ressources | ||
BackupRBAC | Créer une sauvegarde de toutes les opérations liées à RBAC dans l'instance courante. | BackupRBAC | |
RestoreRBAC | Restaurer 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 | Insérer des 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 | Créer un utilisateurou un rôle [CreateUser/CreateRole](https://zilliverse.feishu.cn/wiki/CnzkwQBW3i7bE3kVtLzcqQLtn9d) |
UpdateUser | Mettre à jour le mot de passe d'un utilisateur | [UpdateCredential](https://zilliverse.feishu.cn/wiki/CnzkwQBW3i7bE3kVtLzcqQLtn9d) | |
DropOwnership | Supprimer le mot de passe d'un utilisateur ou d'un rôle | [DeleteCredential/DropRole](https://zilliverse.feishu.cn/wiki/OqZnwJHrJilLPukfvp5cSgnmnTh) | |
Sélectionner la propriété | Afficher tous les utilisateurs auxquels un rôle spécifique a été attribué | [SelectRole/SelectGrant](https://zilliverse.feishu.cn/wiki/ZsNZwn1MkiOtH9kFU35cyRgVnue) | |
ManageOwnership | Gérer un utilisateur ou un rôle ou accorder un rôle à un utilisateur | ||
SelectUser | Voir tous les rôles accordés à un utilisateur | [SelectUser](https://zilliverse.feishu.cn/wiki/ZsNZwn1MkiOtH9kFU35cyRgVnue) | |
CreatePrivilegeGroup | Créer un groupe de privilèges | [CreatePrivilegeGroup](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
DropPrivilegeGroup | Supprimer un groupe de privilèges | [DropPrivilegeGroup](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
ListPrivilegeGroups | Affiche tous les groupes de privilèges dans l'instance actuelle | [ListPrivilegeGroups](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
OperatePrivilegeGroup | Ajouter ou supprimer des privilèges à un groupe de privilèges | [OperatePrivilegeGroup](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) |
L'exemple suivant montre comment accorder le privilège PrivilegeSearch
à collection_01
sous la base de données par défaut 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 "github.com/milvus-io/milvus-sdk-go/v2/client"
client.GrantV2(context.Background(), "role_a", "collection_01", "Search", entity.WithOperatePrivilegeDatabase("default"))
client.GrantV2(context.Background(), "role_a", "collection_01", "privilege_group_1", entity.WithOperatePrivilegeDatabase("default"))
client.GrantV2(context.Background(), "role_a", "*", "ClusterReadOnly", entity.WithOperatePrivilegeDatabase("*"))
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node")
const address = "http://localhost:19530";
const token = "root:Milvus";
const client = new MilvusClient({address, token});
await milvusClient.grantPrivilege({
roleName: 'role_a',
object: 'Collection',
objectName: 'collection_01',
privilegeName: 'Search'
});
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-sdk-go/v2/client"
client.ListRoles(context.Background())
const { MilvusClient, DataType } = require("@zilliz/milvus2-sdk-node")
await milvusClient.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 par défaut ainsi que le groupe de privilèges privilege_group_1
qui ont été accordés au rôle role_a
.
from pymilvus import MilvusClient
client = MilvusClient(
uri="http://localhost:19530",
token="root:Milvus"
)
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());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.RevokeV2(context.Background(), "role_a", "collection_01", "Search", entity.WithOperatePrivilegeDatabase("default"))
client.RevokeV2(context.Background(), "role_a", "collection_01", "privielge_group_1", entity.WithOperatePrivilegeDatabase("default"))
client.RevokeV2(context.Background(), "role_a", "*", "ClusterReadOnly", entity.WithOperatePrivilegeDatabase("*"))
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":"*"
}'