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
COLL_RO: inclui privilégios para ler os dados da coleção
COLL_RW: inclui privilégios para ler e escrever dados da coleção
COLL_ADMIN: inclui privilégios para ler e escrever dados de coleção e gerir colecçõ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.
**Privilege** | **CollectionReadOnly** | **CollectionReadWrite** | **CollectionAdmin** |
---|---|---|---|
Consulta | ✔️ | ✔️ | ✔️ |
Pesquisa | ✔️ | ✔️ | ✔️ |
Detalhes do índice | ✔️ | ✔️ | ✔️ |
GetFlushState | ✔️ | ✔️ | ✔️ |
GetLoadState | ✔️ | ✔️ | ✔️ |
GetLoadingProgress | ✔️ | ✔️ | ✔️ |
HasPartition | ✔️ | ✔️ | ✔️ |
ShowPartitions | ✔️ | ✔️ | ✔️ |
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 | ❌ | ❌ | ✔️ |
SoltarAlias | ❌ | ❌ | ✔️ |
Nível da base de dados
DB_RO: inclui privilégios para ler dados da base de dados
DB_RW: inclui privilégios para ler e escrever dados da base de dados
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.
**Privilege** | **DatabaseReadOnly** | **DatabaseReadWrite** | **DatabaseAdmin** |
---|---|---|---|
Mostrar colecções | ✔️ | ✔️ | ✔️ |
Descrever a base de dados | ✔️ | ✔️ | ✔️ |
CriarColeção | ❌ | ❌ | ✔️ |
Deixar coleção | ❌ | ❌ | ✔️ |
Alterar base de dados | ❌ | ✔️ | ✔️ |
Nível do cluster
Cluster_RO: inclui privilégios para ler dados da instância
Cluster_RW: inclui privilégios para ler e escrever dados da instância
Cluster_Admin: inclui privilégios para ler e gravar dados da instância 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.
**Privilege** | **ClusterReadOnly** | **ClusterReadWrite** | **ClusterAdmin** |
---|---|---|---|
ListDatabases | ✔️ | ✔️ | ✔️ |
Renomear coleção | ❌ | ❌ | ✔️ |
Criar Propriedade | ❌ | ❌ | ✔️ |
ActualizarUsuário | ❌ | ❌ | ✔️ |
DropOwnership | ❌ | ❌ | ✔️ |
Seleção de propriedade | ✔️ | ✔️ | ✔️ |
GerirPropriedade | ❌ | ❌ | ✔️ |
SeleccionarUtilizador | ✔️ | ✔️ | ✔️ |
BackupRBAC | ❌ | ❌ | ✔️ |
RestaurarRBAC | ❌ | ❌ | ✔️ |
CriarGrupo de Recursos | ❌ | ❌ | ✔️ |
AbandonarGrupo de Recursos | ❌ | ❌ | ✔️ |
ActualizarGrupos de Recursos | ❌ | ✔️ | ✔️ |
Descrever o grupo de recursos | ✔️ | ✔️ | ✔️ |
Listar grupos de recursos | ✔️ | ✔️ | ✔️ |
TransferNode | ❌ | ✔️ | ✔️ |
TransferReplica | ❌ | ✔️ | ✔️ |
CriarBaseDeDados | ❌ | ❌ | ✔️ |
DropDatabase | ❌ | ❌ | ✔️ |
FlushAll | ❌ | ✔️ | ✔️ |
CriarGrupoPrivilegiado | ❌ | ❌ | ✔️ |
AbandonarGrupoPrivilegiado | ❌ | ❌ | ✔️ |
ListarGruposPrivilegiados | ❌ | ❌ | ✔️ |
OperarPrivilegeGroup | ❌ | ❌ | ✔️ |
Procedimentos
Você 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 seguinte demonstra como criar um grupo de privilégios com o nome 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"
}'
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 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"]
}'
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 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 privilégios
O exemplo seguinte demonstra como listar todos os grupos de privilégios 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 '{}'
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 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"
}'