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
COLL_RO: incluye privilegios para leer datos de recopilación
COLL_RW: incluye privilegios para leer y escribir datos de recopilación
COLL_ADMIN: incluye privilegios para leer y escribir datos de colecciones y gestionar colecciones.
La siguiente tabla enumera los privilegios específicos incluidos en los tres grupos de privilegios incorporados en el nivel de recopilación.
**Privilegio** | **ColecciónSóloLectura | **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
DB_RO: incluye privilegios para leer datos de la base de datos
DB_RW: incluye privilegios para leer y escribir datos de bases de datos
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** | **Sólo lectura de basede datos | **Base de datosLecturaEscritura | **Administrador de base de datos |
---|---|---|---|
MostrarColecciones | ✔️ | ✔️ | ✔️ |
DescribirBaseDeDatos | ✔️ | ✔️ | ✔️ |
CrearColección | ❌ | ❌ | ✔️ |
SoltarColección | ❌ | ❌ | ✔️ |
AlterDatabase | ❌ | ✔️ | ✔️ |
Nivel de cluster
Cluster_RO: incluye privilegios para leer datos de instancias
Cluster_RW: incluye privilegios para leer y escribir datos de instancia
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** | **Sólo lectura de clúster | **ClusterReadWrite | **Administrador de clústeres |
---|---|---|---|
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_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"
}'
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 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"]
}'
Eliminar 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 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"]
}'
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 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 '{}'
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 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"
}'