Crear grupo de privilegios
Para agilizar el proceso de concesión de privilegios, se recomienda combinar varios privilegios en un grupo de privilegios.
Grupo de privilegios frente a privilegios
Un grupo de privilegios está formado por varios privilegios.
Ilustración de un grupo de privilegios
Como se muestra en la figura anterior, supongamos que necesita conceder tres privilegios diferentes a un rol.
Si no utiliza un grupo de privilegios, tendrá que conceder los privilegios tres veces.
Si utiliza un grupo de privilegios, sólo tiene que crear un grupo de privilegios y añadir los tres privilegios a este grupo de privilegios y conceder el grupo de privilegios al rol A.
Al utilizar un grupo de privilegios, puede conceder varios privilegios en bloque a un rol.
Grupos de privilegios incorporados
Para facilitar su uso, Milvus proporciona un total de 9 privilegios incorporados a nivel de colección, base de datos e instancia: COLL_RO, COLL_RW, COLL_ADMIN, DB_RO, DB_RW, DB_Admin, Cluster_RO, Cluster_RW y Cluster_Admin.
Los tres niveles de grupos de privilegios incorporados no tienen una relación en cascada. Establecer un grupo de privilegios a nivel de instancia no establece automáticamente permisos para todas las bases de datos y colecciones bajo esa instancia. Los privilegios en los niveles de base de datos y colección deben establecerse manualmente.
En las tablas siguientes se explican los privilegios incluidos en cada uno de los grupos de privilegios incorporados.
Nivel de colección
ColecciónSóloLectura (COLL_RO): incluye privilegios para leer datos de la colección
ColecciónLecturaEscritura (COLL_RW): incluye privilegios para leer y escribir datos de la colección
CollectionAdmin (COLL_ADMIN): incluye privilegios para leer y escribir datos de colecciones y gestionar colecciones.
La tabla siguiente enumera los privilegios específicos incluidos en los tres grupos de privilegios incorporados en el nivel de recopilación:
Privilegio |
ColecciónSólo lectura |
ColecciónLecturaEscritura |
Administrador de colecciones |
|---|---|---|---|
Consulta |
✔️ |
✔️ |
✔️ |
Búsqueda |
✔️ |
✔️ |
✔️ |
ÍndiceDetalle |
✔️ |
✔️ |
✔️ |
GetFlushState |
✔️ |
✔️ |
✔️ |
GetLoadState |
✔️ |
✔️ |
✔️ |
GetLoadingProgress |
✔️ |
✔️ |
✔️ |
HasPartition |
✔️ |
✔️ |
✔️ |
MostrarParticiones |
✔️ |
✔️ |
✔️ |
ListAliases |
✔️ |
✔️ |
✔️ |
DescribirColección |
✔️ |
✔️ |
✔️ |
DescribeAlias |
✔️ |
✔️ |
✔️ |
ObtenerEstadísticas |
✔️ |
✔️ |
✔️ |
Crearíndice |
❌ |
✔️ |
✔️ |
DropIndex |
❌ |
✔️ |
✔️ |
CrearPartición |
❌ |
✔️ |
✔️ |
DropPartition |
❌ |
✔️ |
✔️ |
Cargar |
❌ |
✔️ |
✔️ |
Liberar |
❌ |
✔️ |
✔️ |
Insertar |
❌ |
✔️ |
✔️ |
Borrar |
❌ |
✔️ |
✔️ |
Subir |
❌ |
✔️ |
✔️ |
Importar |
❌ |
✔️ |
✔️ |
Descarga |
❌ |
✔️ |
✔️ |
Compactación |
❌ |
✔️ |
✔️ |
Balance de carga |
❌ |
✔️ |
✔️ |
CrearAlias |
❌ |
❌ |
✔️ |
DropAlias |
❌ |
❌ |
✔️ |
Nivel de base de datos
DatabaseReadOnly (DB_RO): incluye privilegios para leer datos de la base de datos
DatabaseReadWrite (DB_RW): incluye privilegios para leer y escribir datos de la base de datos
DatabaseAdmin (DB_Admin): incluye privilegios para leer y escribir datos de bases de datos y gestionar bases de datos.
La siguiente tabla enumera los privilegios específicos incluidos en los tres grupos de privilegios incorporados a nivel de base de datos:
Privilegio |
Base de datosSólo lectura |
DatabaseReadWrite |
DatabaseAdmin |
|---|---|---|---|
MostrarColecciones |
✔️ |
✔️ |
✔️ |
DescribirBaseDeDatos |
✔️ |
✔️ |
✔️ |
CrearColección |
✔️ |
✔️ |
✔️ |
SoltarColección |
❌ |
❌ |
✔️ |
AlterDatabase |
❌ |
✔️ |
✔️ |
Nivel de clúster
ClusterReadOnly (Cluster_RO): incluye privilegios para leer datos de instancia.
ClusterReadWrite (Cluster_RW): incluye privilegios para leer y escribir datos de instancia
ClusterAdmin (Cluster_Admin): incluye privilegios para leer y escribir datos de instancia y gestionar instancias.
La siguiente tabla enumera los privilegios específicos incluidos en los tres grupos de privilegios incorporados a nivel de instancia:
Privilegio |
ClusterReadOnly |
ClusterReadWrite |
ClusterAdmin |
|---|---|---|---|
ListDatabases |
✔️ |
✔️ |
✔️ |
RenombrarColección |
❌ |
❌ |
✔️ |
CrearPropiedad |
❌ |
❌ |
✔️ |
ActualizarUsuario |
❌ |
❌ |
✔️ |
DropOwnership |
❌ |
❌ |
✔️ |
SeleccionarPropiedad |
✔️ |
✔️ |
✔️ |
GestionarPropiedad |
❌ |
❌ |
✔️ |
SeleccionarUsuario |
✔️ |
✔️ |
✔️ |
BackupRBAC |
❌ |
❌ |
✔️ |
RestaurarRBAC |
❌ |
❌ |
✔️ |
CrearResourceGroup |
❌ |
❌ |
✔️ |
DropResourceGroup |
❌ |
❌ |
✔️ |
ActualizarResourceGroups |
❌ |
✔️ |
✔️ |
DescribeResourceGroup |
✔️ |
✔️ |
✔️ |
ListResourceGroups |
✔️ |
✔️ |
✔️ |
TransferNode |
❌ |
✔️ |
✔️ |
TransferReplica |
❌ |
✔️ |
✔️ |
CrearBaseDeDatos |
❌ |
❌ |
✔️ |
DropDatabase |
❌ |
❌ |
✔️ |
FlushAll |
❌ |
✔️ |
✔️ |
CrearGrupoDePrivilegios |
❌ |
❌ |
✔️ |
DropPrivilegeGroup |
❌ |
❌ |
✔️ |
ListPrivilegeGroups |
❌ |
❌ |
✔️ |
OperatePrivilegeGroup |
❌ |
❌ |
✔️ |
Procedimientos
Puede crear un grupo de privilegios y, a continuación, añadir privilegios al grupo de privilegios.
Creación de un grupo de privilegios
El siguiente ejemplo muestra cómo crear un grupo de privilegios denominado 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"
}'
Adición de privilegios a un grupo de privilegios
El siguiente ejemplo muestra cómo añadir los privilegios PrivilegeBackupRBAC y PrivilegeRestoreRBAC al grupo de privilegios privilege_group_1 que se acaba de crear.
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"]
}'
Eliminación de privilegios de un grupo de privilegios
El siguiente ejemplo muestra cómo eliminar el privilegio PrivilegeRestoreRBAC del grupo de privilegios 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"]
}'
Listar grupos de privilegios
El siguiente ejemplo muestra cómo listar todos los grupos de privilegios existentes.
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 '{}'
A continuación se muestra un ejemplo de salida.
PrivilegeGroupItem: <privilege_group:privilege_group_1>, <privileges:('Search', 'Query')>
Eliminar un grupo de privilegios
El siguiente ejemplo muestra cómo eliminar el grupo de privilegios 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"
}'