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 | client.grant_privilege_v2(role_name="roleA", privilege="CollectionAdmin", collection_name="col1", db_name="db1") | Introduza o nome da coleção de destino e o nome da base de dados à qual a coleção de destino pertence. |
Todas as colecções numa base de dados específica | client.grant_privilege_v2(role_name="roleA", privilege="CollectionAdmin", collection_name="*", db_name="db1") | Introduza o nome da sua base de dados de destino e um wildcard | |
**Base de dados** | Uma base de dados específica | client.grant_privilege_v2(role_name="roleA", privilege="DatabaseAdmin", collection_name="*", db_name="db1") | Introduza o nome da sua base de dados de destino e um wildcard |
Todas as bases de dados na instância atual | client.grant_privilege_v2(role_name="roleA", privilege="DatabaseAdmin", collection_name="*", db_name="*") | Introduza | |
**Instância** | A instância atual | client.grant_privilege_v2(role_name="roleA", privilege="ClusterAdmin", collection_name="*", db_name="*") | 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 disponibiliza 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. Só precisa de introduzir os privilégios correspondentes.
**Tipo | **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 | |
DescreverBase de Dados | Ver os detalhes de uma base de dados | [DescribeDatabase](https://milvus.io/docs/manage_databases.md) | |
CriarBase de Dados | Criar uma base de dados | [CreateDatabase](https://milvus.io/docs/manage_databases.md) | |
DropDatabase | Eliminar uma base de dados | ||
Alterar base de dados | Modificar as propriedades de uma base de dados | ||
Privilégios de coleção | GetFlushState | Verificar o estado da operação de descarga da coleção | [GetFlushState](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/Collection/flush.md) |
GetLoadState | Verificar o estado de carregamento de uma coleção | ||
GetLoadingProgress | Verificar o progresso do carregamento de uma coleção | ||
Mostrar colecções | Ver todas as colecções com privilégios de coleção | [ShowCollections](https://milvus.io/docs/view-collections.md) | |
ListAliases | Ver todos os nomes alternativos 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 | [CreateCollection](https://milvus.io/docs/create-collection.md) | |
Soltar coleção | Eliminar uma coleção | ||
Carregar | Carregar uma coleção | [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) | |
Libertação | Libertar uma coleção | [ReleaseCollection](https://milvus.io/docs/load-and-release.md) | |
Descarregar | Persiste todas as entidades de uma coleção num segmento selado. Qualquer entidade inserida após a operação de flush será armazenada num novo 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) | |
Compactação | Ativar manualmente a compactação | ||
Renomear coleção | Mudar o nome de uma coleção | [RenameCollection](https://milvus.io/docs/modify-collection.md) | |
CriarAlias | Criar um pseudónimo para uma coleção | ||
EliminarAlias | Eliminar o nome alternativo de uma coleção | ||
FlushAll | Eliminar todas as colecções de uma base de dados | [FlushAll](https://milvus.io/api-reference/pymilvus/v2.5.x/ORM/utility/flush_all.md) | |
Privilégios de partição | HasPartition | Verifica se existe uma partição | |
MostrarPartições | Ver todas as partições de uma coleção | [ShowPartitions](https://milvus.io/docs/manage-partitions.md) | |
CriarPartição | Criar uma partição | [CreatePartition](https://milvus.io/docs/manage-partitions.md) | |
SoltarPartição | Eliminar uma partição | [DropPartition](https://milvus.io/docs/manage-partitions.md) | |
Privilégios do índice | Detalhes do índice | Ver os detalhes de um índice | |
CriarIndex | Criar um índice | [CreateIndex](https://milvus.io/docs/index-vetor-fields.md?tab=floating) | |
DropIndex | Eliminar um índice | [DropIndex](https://milvus.io/docs/index-vetor-fields.md?tab=floating) | |
Privilégios de gestão de recursos | LoadBalance | Alcançar o equilíbrio de carga | |
CreateResourceGroup (Criar grupo de recursos) | Criar um grupo de recursos | ||
DropResourceGroup | Eliminar um grupo de recursos | [DropResourceGroup](https://milvus.io/docs/resource_group.md) | |
UpdateResourceGroups (Atualizar grupos de recursos) | Atualizar um grupo de recursos | [UpdateResourceGroups](https://milvus.io/docs/resource_group.md) | |
DescreverGrupo de Recursos | Ver os pormenores de um grupo de recursos | [DescribeResourceGroup](https://milvus.io/docs/resource_group.md) | |
ListResourceGroups | Ver todos os grupos de recursos da instância atual | [ListResourceGroups](https://milvus.io/docs/resource_group.md) | |
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 | |
Pesquisa | Efetuar uma pesquisa | ||
Inserir | Inserir entidades | ||
Eliminar | Eliminar entidades | ||
Upsert | Inserir entidades | ||
Importar | Inserir ou importar entidades em massa | ||
Privilégios RBAC | CriarPropriedade | Criar um utilizador ou uma função | [CreateUser/CreateRole](https://zilliverse.feishu.cn/wiki/CnzkwQBW3i7bE3kVtLzcqQLtn9d) |
UpdateUser (Atualizar utilizador) | Atualizar a palavra-passe de um utilizador | [UpdateCredential](https://zilliverse.feishu.cn/wiki/CnzkwQBW3i7bE3kVtLzcqQLtn9d) | |
DropOwnership | Eliminar a palavra-passe de um utilizador ou uma função | [DeleteCredential/DropRole](https://zilliverse.feishu.cn/wiki/OqZnwJHrJilLPukfvp5cSgnmnTh) | |
SeleccionarPropriedade | Ver todos os utilizadores a quem foi atribuída uma função específica | [SelectRole/SelectGrant](https://zilliverse.feishu.cn/wiki/ZsNZwn1MkiOtH9kFU35cyRgVnue) | |
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 | [SelectUser](https://zilliverse.feishu.cn/wiki/ZsNZwn1MkiOtH9kFU35cyRgVnue) | |
Criar grupo de privilégios | Criar um grupo de privilégios | [CreatePrivilegeGroup](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
DropPrivilegeGroup (Abandonar grupo de privilégios) | Eliminar um grupo de privilégios | [DropPrivilegeGroup](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
ListPrivilegeGroups | Ver todos os grupos de privilégios na instância atual | [ListPrivilegeGroups](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) | |
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 | [OperatePrivilegeGroup](https://zilliverse.feishu.cn/wiki/FpV8wdWcZiDwnQkBloucYF7wnUg) |
O exemplo a seguir demonstra como conceder o privilégio PrivilegeSearch
em collection_01
no banco de dados padrão, 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 "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":"*"
}'
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-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"
}'
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 padrão, bem como o grupo de privilégios privilege_group_1
que foram concedidos à função 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":"*"
}'