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 bajo 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 | |
**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 un comodín |
Todas las bases de datos de la instancia actual | client.grant_privilege_v2(role_name="roleA", privilege="DatabaseAdmin", collection_name="*", db_name="*") | Introduzca | |
**Instancia** | La instancia actual | client.grant_privilege_v2(role_name="roleA", privilege="ClusterAdmin", collection_name="*", db_name="*") | Introduzca |
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 | [Lista de bases de datos](https://milvus.io/docs/manage_databases.md) |
DescribirBaseDeDatos | Ver los detalles de una base de datos | [DescribeDatabase](https://milvus.io/docs/manage_databases.md) | |
CrearBaseDeDatos | Crear una base de datos | [Crear base de datos](https://milvus.io/docs/manage_databases.md) | |
SoltarBaseDeDatos | Eliminar una base de datos | ||
AlterDatabase | Modificar las propiedades de una base de datos | ||
Privilegios de recopilación | GetFlushState | Comprobar el estado de la operación de vaciado de colecciones | [GetFlushState](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/Collection/flush.md) |
GetLoadState | Comprueba el estado de carga de una colección | ||
GetLoadingProgress | Comprueba el progreso de carga de una colección | [GetLoadingProgress](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/utility/loading_progress.md) | |
MostrarColecciones | Ver todas las colecciones con privilegios de colección | [Mostrar colecciones](https://milvus.io/docs/view-collections.md) | |
ListAliases | Ver todos los alias de una colección | ||
DescribirColección | Ver los detalles de una colección | ||
DescribirAlias | Ver los detalles de un alias | ||
ObtenerEstadísticas | Obtener las estadísticas de una colección (por ejemplo, el número de entidades de una colección) | ||
CrearColección | Crear una colección | [CrearColección](https://milvus.io/docs/create-collection.md) | |
SoltarColección | Soltar una colección | [Soltar colección](https://milvus.io/docs/drop-collection.md) | |
Cargar | Cargar una colección | [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) | |
Liberar | Liberar una colección | [LiberarColección](https://milvus.io/docs/load-and-release.md) | |
Tirar de la cadena | Persiste todas las entidades de una colección en un segmento sellado. Cualquier entidad insertada después de la operación de vaciado se almacenará en un nuevo segmento. | [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) | |
Compactación | Activación manual de la compactación | ||
RenombrarColección | Renombrar una colección | [RenombrarColección](https://milvus.io/docs/modify-collection.md) | |
CrearAlias | Crear un alias para una colección | ||
SoltarAlias | Eliminar el alias de una colección | ||
VaciarTodas | Vaciar todas las colecciones de una base de datos | [FlushAll](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/utility/flush_all.md) | |
Privilegios de partición | TienePartición | Comprobar si existe una partición | [TienePartición](https://milvus.io/docs/manage-partitions.md) |
MostrarParticiones | Ver todas las particiones de una colección | [MostrarParticiones](https://milvus.io/docs/manage-partitions.md) | |
CrearPartición | Crear una partición | [CrearPartición](https://milvus.io/docs/manage-partitions.md) | |
SoltarPartición | Soltar una partición | [DropPartition](https://milvus.io/docs/manage-partitions.md) | |
Privilegios de índice | Detalle del índice | Ver los detalles de un índice | |
CrearÍndice | Crear un índice | [Crear índice](https://milvus.io/docs/index-vector-fields.md?tab=floating) | |
Soltar índice [DropIndex]() | Elimina un índice | [Soltar índice](https://milvus.io/docs/index-vector-fields.md?tab=floating) | |
Privilegios de gestión de recursos | Equilibrio de carga | Lograr el equilibrio de carga | |
CrearGrupoDeRecursos | Crear un grupo de recursos | ||
SoltarGrupoDeRecursos | Eliminar un grupo de recursos | [SoltarGrupoDeRecursos](https://milvus.io/docs/resource_group.md) | |
ActualizarGrupoDeRecursos | Actualizar un grupo de recursos | [UpdateResourceGroups](https://milvus.io/docs/resource_group.md) | |
DescribirGrupoDeRecursos | Ver los detalles de un grupo de recursos | [DescribeResourceGroup](https://milvus.io/docs/resource_group.md) | |
ListResourceGroups | Ver todos los grupos de recursos de la instancia actual | [ListResourceGroups](https://milvus.io/docs/resource_group.md) | |
TransferNode | Transferir nodos entre grupos de recursos | ||
TransferReplica | Transferir réplicas entre grupos de recursos | ||
CopiaRBAC | 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 | Consultar | Realizar una consulta | |
Búsqueda | Realizar una búsqueda | ||
Insertar | Insertar entidades | ||
Borrar | Borrar entidades | ||
Subir | Insertar entidades | ||
Importar | Insertar o importar entidades en bloque | ||
Privilegios RBAC | CrearPropiedad | Crear un usuario o un rol | [CrearUsuario/CrearRol](https://zilliverse.feishu.cn/wiki/CnzkwQBW3i7bE3kVtLzcqQLtn9d) |
ActualizarUsuario | Actualizar la contraseña de un usuario | [Actualizar credencial](https://zilliverse.feishu.cn/wiki/CnzkwQBW3i7bE3kVtLzcqQLtn9d) | |
EliminarPropiedad | Dar de baja la contraseña de un usuario o un rol | [BorrarCredencial/SuprimirRol](https://zilliverse.feishu.cn/wiki/OqZnwJHrJilLPukfvp5cSgnmnTh) | |
SeleccionarPropiedad | Ver todos los usuarios a los que se ha concedido una función específica | [SelectRole/SelectGrant](https://zilliverse.feishu.cn/wiki/ZsNZwn1MkiOtH9kFU35cyRgVnue) | |
GestionarPropiedad | Gestionar un usuario o un rol o conceder un rol a un usuario | ||
SeleccionarUsuario | Ver todos los roles concedidos a un usuario | [SeleccionarUsuario](https://zilliverse.feishu.cn/wiki/ZsNZwn1MkiOtH9kFU35cyRgVnue) | |
CrearGrupoDePrivilegios | Crear un grupo de privilegios | [Crear grupo de privilegios](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
DeshacerGrupoDePrivilegios | Eliminar un grupo de privilegios | [Grupo de privilegios](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
ListarGrupoDePrivilegios | Ver todos los grupos de privilegios de la instancia actual | [Lista de grupos de privilegios](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
OperarGrupoDePrivilegios | Añadir o eliminar privilegios de un grupo de privilegios | [OperatePrivilegeGroup](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) |
El siguiente ejemplo demuestra cómo conceder el privilegio PrivilegeSearch
en collection_01
bajo la base de datos por defecto, así como un grupo de privilegios llamado 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 "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":"*"
}'
Describir un rol
El siguiente ejemplo muestra 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-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"
}'
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 por defecto así como el grupo de privilegios privilege_group_1
que han sido concedidos al rol 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":"*"
}'