Conceder privilegios o grupos de privilegios a roles

Una vez creado un rol, puede concederle privilegios. Esta guía explica cómo conceder privilegios o grupos de privilegios a un rol.

Conceder un privilegio o un grupo de privilegios a un rol

Milvus 2.5 introduce una nueva versión de la API que agiliza la operación de concesión. Ya no es necesario buscar el tipo de objeto cuando se concede un privilegio a un rol. A continuación se indican los parámetros y las explicaciones correspondientes.

  • role_name: El nombre del rol de destino al que deben concederse privilegios o grupos de privilegios.

  • Recurso: El recurso de destino de un privilegio, que puede ser una instancia, base de datos o colección específica.

La siguiente tabla explica cómo especificar el recurso en el método client.grantV2().

Nivel

Recurso

Método de concesión

Notas

Colección

Una colección específica

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="CollectionAdmin",
     collection_name="col1", 
     db_name="db1"
 )

Introduzca el nombre de la colección de destino y el nombre de la base de datos a la que pertenece la colección de destino.

Todas las colecciones de una base de datos específica

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="CollectionAdmin",
     collection_name="*", 
     db_name="db1"
 )

Introduzca el nombre de la base de datos de destino y un comodín * como nombre de la colección.

Base de datos

Una base de datos específica

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="DatabaseAdmin", 
     collection_name="*", 
     db_name="db1"
 )

Introduzca el nombre de la base de datos de destino y el comodín * como nombre de la colección.

Todas las bases de datos de la instancia actual

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="DatabaseAdmin", 
     collection_name="*", 
     db_name="*"
 )

Introduzca * como nombre de la base de datos y * como nombre de la colección.

Instancia

La instancia actual

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="ClusterAdmin", 
     collection_name="*", 
     db_name="*"
 )

Introduzca * como nombre de la base de datos y * como nombre de la colección.

  • Privilegio: El privilegio específico o grupo de privilegios que necesita otorgar a un rol. Actualmente, Milvus proporciona 56 tipos de privilegios que puede conceder. La siguiente tabla enumera los privilegios en Milvus.

    La columna de tipo en la tabla de abajo es de usuario para facilitar su búsqueda rápida de privilegios y se utiliza sólo con fines de clasificación. Cuando conceda privilegios, no necesita entender los tipos. Sólo tiene que introducir los privilegios correspondientes.

    Tipo

    Privilegio

    Descripción

    Descripción de la API correspondiente en el lado del cliente

    Privilegios de base de datos

    ListDatabases

    Ver todas las bases de datos de la instancia actual

    ListDatabases

    DescribeDatabase

    Ver los detalles de una base de datos

    DescribeDatabase

    CrearBaseDeDatos

    Crear una base de datos

    CrearBaseDeDatos

    SoltarBaseDeDatos

    Eliminar una base de datos

    DropDatabase

    AlterDatabase

    Modificar las propiedades de una base de datos

    AlterDatabase

    Privilegios de recogida

    GetFlushState

    Comprobar el estado de la operación de vaciado de la colección

    GetFlushState

    GetLoadState

    Comprueba el estado de carga de una colección

    GetLoadState

    GetLoadingProgress

    Comprueba el progreso de carga de una colección

    ObtenerProgresoDeCarga

    Mostrar colecciones

    Ver todas las colecciones con privilegios de colección

    Mostrar colecciones

    ListAliases

    Ver todos los alias de una colección

    ListAliases

    DescribirColección

    Ver los detalles de una colección

    DescribirColección

    DescribirAlias

    Ver los detalles de un alias

    DescribeAlias

    ObtenerEstadísticas

    Obtener las estadísticas de una colección (por ejemplo, el número de entidades de una colección)

    Obtener estadísticas de la colección

    CrearColección

    Crear una colección

    CrearColección

    SoltarColección

    Soltar una colección

    SoltarColección

    Cargar

    Cargar una colección

    CargarColección/GetLoadingProgress/GetLoadState

    Liberar

    Liberar una colección

    LiberarColección

    Descargar

    Persiste todas las entidades de una colección en un segmento sellado. Cualquier entidad insertada después de la operación flush se almacenará en un nuevo segmento.

    Flush/GetFlushState

    Compactación

    Compactación manual

    Compactar

    RenombrarColección

    Renombrar una colección

    RenombrarColección

    CrearAlias

    Crear un alias para una colección

    CrearAlias

    SoltarAlias

    Eliminar el alias de una colección

    EliminarAlias

    VaciarTodas

    Vaciar todas las colecciones de una base de datos

    FlushAll

    Privilegios de partición

    TienePartición

    Comprobar si existe una partición

    TienePartición

    MostrarParticiones

    Ver todas las particiones de una colección

    MostrarParticiones

    CrearPartición

    Crear una partición

    CrearPartición

    SoltarPartición

    Soltar una partición

    DropPartition

    Privilegios de índice

    Detalles del índice

    Ver los detalles de un índice

    DescribeIndex/GetIndexState/GetIndexBuildProgress

    CrearÍndice

    Crear un índice

    Crear índice

    Soltar índice

    Eliminar un índice

    Eliminar índice

    Privilegios de gestión de recursos

    Equilibrio de carga

    Lograr el equilibrio de carga

    LoadBalance

    CrearGrupoDeRecursos

    Crear un grupo de recursos

    CrearGrupoDeRecursos

    SoltarGrupoDeRecursos

    Eliminar un grupo de recursos

    DropResourceGroup

    ActualizarGrupoDeRecursos

    Actualizar un grupo de recursos

    UpdateResourceGroups

    DescribeResourceGroup

    Ver los detalles de un grupo de recursos

    DescribeResourceGroup

    ListResourceGroups

    Ver todos los grupos de recursos de la instancia actual

    ListResourceGroups

    TransferNode

    Transferir nodos entre grupos de recursos

    TransferNode

    TransferReplica

    Transferir réplicas entre grupos de recursos

    TransferReplica

    Copia de seguridadRBAC

    Crear una copia de seguridad de todas las operaciones relacionadas con RBAC en la instancia actual

    BackupRBAC

    RestaurarRBAC

    Restaurar una copia de seguridad de todas las operaciones relacionadas con RBAC en la instancia actual

    RestaurarRBAC

    Privilegios de Entidad

    Consulta

    Realizar una consulta

    Consulta

    Buscar en

    Realizar una búsqueda

    Buscar en

    Insertar

    Insertar entidades

    Insertar

    Borrar

    Borrar entidades

    Borrar

    Subir

    Insertar entidades

    Añadir

    Importar

    Insertar o importar entidades en bloque

    Insertar/Importar en bloque

    Privilegios RBAC

    CrearPropiedad

    Crear un usuario o un rol

    CrearUsuario/CrearRol

    ActualizarUsuario

    Actualizar la contraseña de un usuario

    UpdateCredential

    SoltarPropiedad

    Dar de baja la contraseña de un usuario o un rol

    DeleteCredential/DropRole

    Seleccionar titularidad

    Ver todos los usuarios a los que se ha concedido una función específica

    SelectRole/SelectGrant

    GestionarPropiedad

    Gestionar un usuario o una función o conceder una función a un usuario

    OperarRolUsuario/OperarPrivilegio/OperarPrivilegioV2

    SeleccionarUsuario

    Ver todos los roles concedidos a un usuario

    SeleccionarUsuario

    CrearGrupoDePrivilegios

    Crear un grupo de privilegios

    CrearGrupoDePrivilegios

    SoltarGrupoDePrivilegios

    Eliminar un grupo de privilegios

    DropPrivilegeGroup

    ListPrivilegeGroups

    Ver todos los grupos de privilegios de la instancia actual

    ListPrivilegeGroups

    OperatePrivilegeGroup

    Añadir o eliminar privilegios de un grupo de privilegios

    OperatePrivilegeGroup

El siguiente ejemplo demuestra cómo conceder el privilegio PrivilegeSearch en collection_01 bajo la base de datos default así como un grupo de privilegios denominado privilege_group_1 al rol 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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-d '{
    "roleName": "role_a",
    "privilege": "ClusterReadOnly",
    "collectionName": "*",
    "dbName":"*"
}'

Describir un rol

El siguiente ejemplo demuestra cómo ver los privilegios otorgados al rol role_a utilizando el método 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" \
--header "Request-Timeout: 10" \
-d '{
    "roleName": "role_a"
}'

A continuación se muestra un ejemplo de salida.

{
     "role": "role_a",
     "privileges": [
         {
             "collection_name": "collection_01",
             "db_name": "default",
             "role_name": "role_a",
             "privilege": "Search",
             "grantor_name": "root"
         },
         "privilege_group_1"
     ]
}

Revocar un privilegio o un grupo de privilegios de un rol

El siguiente ejemplo demuestra cómo revocar el privilegio PrivilegeSearch en collection_01 bajo la base de datos default así como el grupo de privilegios privilege_group_1 que han sido otorgados al rol 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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-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" \
--header "Request-Timeout: 10" \
-d '{
    "roleName": "role_a",
    "privilege": "ClusterReadOnly",
    "collectionName": "*",
    "dbName":"*"
}'

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

¿Fue útil esta página?