Criar um grupo de privilégios
Para simplificar o processo de concessão de privilégios, recomenda-se que combine vários privilégios num grupo de privilégios.
Grupo de privilégios vs. privilégios
Um grupo de privilégios consiste em vários privilégios.
Grupo de privilégios ilustrado
Como mostra a figura acima, suponha que precisa de conceder três privilégios diferentes a uma função.
Se não utilizar um grupo de privilégios, terá de conceder os privilégios três vezes.
Se utilizar um grupo de privilégios, só precisa de criar um grupo de privilégios e adicionar os três privilégios a este grupo de privilégios e conceder o grupo de privilégios à função A.
Ao utilizar um grupo de privilégios, pode conceder vários privilégios em bloco a uma função.
Grupos de privilégios incorporados
Para facilitar a utilização, o Milvus fornece um total de 9 privilégios incorporados ao nível da coleção, da base de dados e da instância: COLL_RO, COLL_RW, COLL_ADMIN, DB_RO, DB_RW, DB_Admin, Cluster_RO, Cluster_RW e Cluster_Admin.
Os três níveis de grupos de privilégios incorporados não têm uma relação em cascata. A definição de um grupo de privilégios ao nível da instância não define automaticamente as permissões para todas as bases de dados e colecções dessa instância. Os privilégios ao nível das bases de dados e das colecções têm de ser definidos manualmente.
As tabelas seguintes explicam os privilégios incluídos em cada um dos grupos de privilégios incorporados.
Nível da coleção
CollectionReadOnly (COLL_RO): inclui privilégios para ler os dados da coleção
CollectionReadWrite (COLL_RW): inclui privilégios para ler e escrever dados da coleção
CollectionAdmin (COLL_ADMIN): inclui privilégios para ler e gravar dados de coleções e gerenciar coleções.
A tabela abaixo lista os privilégios específicos incluídos nos três grupos de privilégios incorporados ao nível da coleção:
Privilégio |
CollectionReadOnly |
CollectionReadWrite |
CollectionAdmin |
|---|---|---|---|
Consulta |
✔️ |
✔️ |
✔️ |
Pesquisa |
✔️ |
✔️ |
✔️ |
Detalhes do índice |
✔️ |
✔️ |
✔️ |
GetFlushState |
✔️ |
✔️ |
✔️ |
GetLoadState |
✔️ |
✔️ |
✔️ |
GetLoadingProgress |
✔️ |
✔️ |
✔️ |
HasPartition |
✔️ |
✔️ |
✔️ |
MostrarPartições |
✔️ |
✔️ |
✔️ |
ListAliases |
✔️ |
✔️ |
✔️ |
Descrever coleção |
✔️ |
✔️ |
✔️ |
DescreverAlias |
✔️ |
✔️ |
✔️ |
Obter estatísticas |
✔️ |
✔️ |
✔️ |
Criar índice |
❌ |
✔️ |
✔️ |
DropIndex |
❌ |
✔️ |
✔️ |
CriarPartição |
❌ |
✔️ |
✔️ |
DropPartition |
❌ |
✔️ |
✔️ |
Carregar |
❌ |
✔️ |
✔️ |
Libertar |
❌ |
✔️ |
✔️ |
Inserir |
❌ |
✔️ |
✔️ |
Eliminar |
❌ |
✔️ |
✔️ |
Inserir |
❌ |
✔️ |
✔️ |
Importar |
❌ |
✔️ |
✔️ |
Descarga |
❌ |
✔️ |
✔️ |
Compactação |
❌ |
✔️ |
✔️ |
Equilíbrio de carga |
❌ |
✔️ |
✔️ |
CriarAlias |
❌ |
❌ |
✔️ |
DropAlias |
❌ |
❌ |
✔️ |
Nível da base de dados
DatabaseReadOnly (DB_RO): inclui privilégios para ler os dados da base de dados
DatabaseReadWrite (DB_RW): inclui privilégios para ler e escrever dados da base de dados
DatabaseAdmin (DB_Admin): inclui privilégios para ler e escrever dados da base de dados e gerir bases de dados.
A tabela abaixo lista os privilégios específicos incluídos nos três grupos de privilégios incorporados ao nível da base de dados:
Privilégio |
Base de dadosSomenteLeitura |
Base de dadosLeadWrite |
DatabaseAdmin |
|---|---|---|---|
Mostrar colecções |
✔️ |
✔️ |
✔️ |
Descrever a base de dados |
✔️ |
✔️ |
✔️ |
Criar coleção |
✔️ |
✔️ |
✔️ |
DropCollection |
❌ |
❌ |
✔️ |
Alterar base de dados |
❌ |
✔️ |
✔️ |
Nível do cluster
ClusterReadOnly (Cluster_RO): inclui privilégios para ler os dados da instância
ClusterReadWrite (Cluster_RW): inclui privilégios para ler e escrever dados da instância
ClusterAdmin (Cluster_Admin): inclui privilégios para ler e gravar dados de instâncias e gerenciar instâncias.
A tabela abaixo lista os privilégios específicos incluídos nos três grupos de privilégios incorporados no nível da instância:
Privilégio |
ClusterReadOnly |
ClusterReadWrite |
Administrador do cluster |
|---|---|---|---|
ListDatabases |
✔️ |
✔️ |
✔️ |
Renomear coleção |
❌ |
❌ |
✔️ |
Criar Propriedade |
❌ |
❌ |
✔️ |
ActualizarUsuário |
❌ |
❌ |
✔️ |
DropOwnership |
❌ |
❌ |
✔️ |
Seleção de propriedade |
✔️ |
✔️ |
✔️ |
GerirPropriedade |
❌ |
❌ |
✔️ |
SeleccionarUtilizador |
✔️ |
✔️ |
✔️ |
BackupRBAC |
❌ |
❌ |
✔️ |
RestaurarRBAC |
❌ |
❌ |
✔️ |
CriarGrupo de Recursos |
❌ |
❌ |
✔️ |
DropResourceGroup |
❌ |
❌ |
✔️ |
ActualizarGrupos de Recursos |
❌ |
✔️ |
✔️ |
Descrever o grupo de recursos |
✔️ |
✔️ |
✔️ |
ListResourceGroups |
✔️ |
✔️ |
✔️ |
TransferNode |
❌ |
✔️ |
✔️ |
TransferReplica |
❌ |
✔️ |
✔️ |
CriarBaseDeDados |
❌ |
❌ |
✔️ |
DropDatabase |
❌ |
❌ |
✔️ |
FlushAll |
❌ |
✔️ |
✔️ |
CriarGrupoPrivilegiado |
❌ |
❌ |
✔️ |
AbandonarGrupoPrivilegiado |
❌ |
❌ |
✔️ |
ListPrivilegeGroups |
❌ |
❌ |
✔️ |
OperarPrivilegeGroup |
❌ |
❌ |
✔️ |
Procedimentos
Pode criar um grupo de privilégios e, em seguida, adicionar privilégios ao grupo de privilégios.
Criar um grupo de privilégios
O exemplo a seguir demonstra como criar um grupo de privilégios chamado 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" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'
Adicionar privilégios a um grupo de privilégios
O exemplo a seguir demonstra como adicionar os privilégios PrivilegeBackupRBAC e PrivilegeRestoreRBAC ao grupo de privilégios privilege_group_1 que acabou de ser criado.
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" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Query", "Search"]
}'
Remover privilégios de um grupo de privilégios
O exemplo a seguir demonstra como remover o privilégio PrivilegeRestoreRBAC do grupo de privilégios 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" \
-d '{
"privilegeGroupName":"privilege_group_1",
"privileges":["Search"]
}'
Listar grupos de privilégios
O exemplo a seguir demonstra como listar todos os grupos de privilégios 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" \
-d '{}'
Abaixo está um exemplo de saída.
PrivilegeGroupItem: <privilege_group:privilege_group_1>, <privileges:('Search', 'Query')>
Eliminar um grupo de privilégios
O exemplo seguinte demonstra como eliminar o grupo de privilégios 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" \
-d '{
"privilegeGroupName":"privilege_group_1"
}'