Conceder privilégios ou grupos de privilégios a funções
Uma vez criada uma função, pode conceder privilégios à mesma. Este guia apresenta a forma de conceder privilégios ou grupos de privilégios a uma função.
Conceder um privilégio ou um grupo de privilégios a uma função
O Milvus 2.5 introduz uma nova versão da API que simplifica a operação de concessão. Já não é necessário procurar o tipo de objeto quando se concede um privilégio a uma função. Seguem-se os parâmetros e as respectivas explicações.
nome_da_função: o nome da função de destino à qual devem ser concedidos privilégios ou grupos de privilégios.
Recurso: O recurso de destino de um privilégio, que pode ser uma instância específica, um banco de dados ou uma coleção.
A tabela a seguir explica como especificar o recurso no método client.grantV2().
Nível |
Recurso |
Método de concessão |
Notas |
|---|---|---|---|
Coleção |
Uma coleção específica |
|
Introduza o nome da sua coleção de destino e o nome da base de dados a que pertence a coleção de destino. |
Todas as colecções de uma base de dados específica |
|
Introduza o nome da sua base de dados de destino e um wildcard |
|
Base de dados |
Uma base de dados específica |
|
Introduza o nome da sua base de dados de destino e um wildcard |
Todas as bases de dados na instância atual |
|
Introduza |
|
Instância |
A instância atual |
|
Introduza |
Privilégio: O privilégio específico ou o grupo de privilégios que é necessário conceder a uma função. Atualmente, o Milvus oferece 56 tipos de privilégios que podem ser concedidos. A tabela abaixo lista os privilégios no Milvus.
A coluna do tipo na tabela abaixo é utilizada para facilitar a pesquisa rápida de privilégios e é utilizada apenas para fins de classificação. Ao conceder privilégios, não precisa de compreender os tipos. Basta introduzir os privilégios correspondentes.
Tipo de privilégio
Privilégio
Descrição
Descrição da API relevante no lado do cliente
Privilégios da base de dados
Listar bases de dados
Ver todas as bases de dados na instância atual
DescreverBaseDeDados
Ver os detalhes de uma base de dados
CriarBaseDeDados
Criar uma base de dados
DropDatabase
Eliminar uma base de dados
Alterar base de dados
Modificar as propriedades de uma base de dados
Privilégios da coleção
GetFlushState
Verificar o estado da operação de descarga da coleção
GetLoadState
Verificar o estado de carregamento de uma coleção
GetLoadingProgress
Verificar o progresso do carregamento de uma coleção
ShowCollections (Mostrar colecções)
Ver todas as colecções com privilégios de coleção
ListAliases
Ver todos os aliases de uma coleção
Descrever coleção
Ver os detalhes de uma coleção
DescreverAlias
Ver os detalhes de um alias
Obter estatísticas
Obter as estatísticas de uma coleção (por exemplo, o número de entidades numa coleção)
Criar coleção
Criar uma coleção
DropCollection
Eliminar uma coleção
Carregar
Carregar uma coleção
Libertar
Libertar uma coleção
Descarregar
Persiste todas as entidades numa coleção para um segmento selado. Qualquer entidade inserida após a operação de descarga será armazenada num novo segmento.
Compactação
Acionar manualmente a compactação
Renomear coleção
Renomear uma coleção
CriarAlias
Criar um pseudónimo para uma coleção
DropAlias
Eliminar o nome alternativo de uma coleção
FlushAll
Elimina todas as colecções de uma base de dados
Privilégios de partição
HasPartition
Verifica se existe uma partição
MostrarPartições
Ver todas as partições de uma coleção
CriarPartição
Criar uma partição
DropPartition
Eliminar uma partição
Privilégios do índice
Detalhes do índice
Ver os detalhes de um índice
Criar índice
Criar um índice
DropIndex
Eliminar um índice
Privilégios de gestão de recursos
Balanceamento de carga
Alcançar o equilíbrio de carga
Criar grupo de recursos
Criar um grupo de recursos
DropResourceGroup
Eliminar um grupo de recursos
UpdateResourceGroups (Atualizar grupos de recursos)
Atualizar um grupo de recursos
Descrever o grupo de recursos
Visualizar os detalhes de um grupo de recursos
ListResourceGroups
Ver todos os grupos de recursos da instância atual
TransferNode
Transferir nós entre grupos de recursos
TransferReplica
Transferir réplicas entre grupos de recursos
BackupRBAC
Criar uma cópia de segurança para todas as operações relacionadas com RBAC na instância atual
Cópia de segurançaRBAC
RestaurarRBAC
Restaurar uma cópia de segurança de todas as operações relacionadas com o RBAC na instância atual
RestaurarRBAC
Privilégios da entidade
Consulta
Efetuar uma consulta
Pesquisar
Efetuar uma pesquisa
Inserir
Inserir entidades
Eliminar
Eliminar entidades
Upsert
Inserir entidades
Importar
Inserir ou importar entidades em massa
Privilégios RBAC
Criar Propriedade
Criar um utilizador ou uma função
Atualizar utilizador
Atualizar a palavra-passe de um utilizador
DropOwnership
Eliminar a palavra-passe de um utilizador ou uma função
Selecionar propriedade
Ver todos os utilizadores a quem foi atribuída uma função específica
GerirPropriedade
Gerir um utilizador ou uma função ou atribuir uma função a um utilizador
SeleccionarUtilizador
Ver todas as funções atribuídas a um utilizador
Criar grupo de privilégios
Criar um grupo de privilégios
DropPrivilegeGroup
Eliminar um grupo de privilégios
ListPrivilegeGroups
Ver todos os grupos de privilégios na instância atual
OperatePrivilegeGroup (Operar Grupo de Privilégios)
Adicionar privilégios a um grupo de privilégios ou remover privilégios de um grupo de privilégios
O exemplo a seguir demonstra como conceder o privilégio PrivilegeSearch em collection_01 no banco de dados default, bem como um grupo de privilégios chamado privilege_group_1 para a função 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":"*"
}'
Descrever uma função
O exemplo a seguir demonstra como visualizar os privilégios concedidos à função role_a usando o 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"
}'
Abaixo está um exemplo de saída.
{
"role": "role_a",
"privileges": [
{
"collection_name": "collection_01",
"db_name": "default",
"role_name": "role_a",
"privilege": "Search",
"grantor_name": "root"
},
"privilege_group_1"
]
}
Revogar um privilégio ou um grupo de privilégios de uma função
O exemplo a seguir demonstra como revogar o privilégio PrivilegeSearch em collection_01 no banco de dados default, bem como o grupo de privilégios privilege_group_1 que foram concedidos à função 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":"*"
}'