Создание группы привилегий

Чтобы упростить процесс предоставления привилегий, рекомендуется объединить несколько привилегий в группу привилегий.

Группа привилегий по сравнению с привилегиями

Группа привилегий состоит из нескольких привилегий.

Privilege Group Illustrated Иллюстрация группы привилегий

Как показано на рисунке выше, предположим, что вам нужно предоставить три различные привилегии для роли.

  • Если вы не используете группу привилегий, вам нужно предоставить привилегии три раза.

  • Если вы используете группу привилегий, вам нужно только создать группу привилегий, добавить три привилегии в эту группу привилегий и предоставить группу привилегий роли A.

Используя группу привилегий, вы можете предоставить роли несколько привилегий в совокупности.

Встроенные группы привилегий

Для простоты использования Milvus предоставляет в общей сложности 9 встроенных привилегий на уровне коллекции, базы данных и экземпляра: COLL_RO, COLL_RW, COLL_ADMIN, DB_RO, DB_RW, DB_Admin, Cluster_RO, Cluster_RW и Cluster_Admin.

Три уровня встроенных групп привилегий не имеют каскадной зависимости. Установка группы привилегий на уровне экземпляра не приводит к автоматическому установлению разрешений для всех баз данных и коллекций под этим экземпляром. Привилегии на уровне баз данных и коллекций необходимо устанавливать вручную.

В следующих таблицах описаны привилегии, включенные в каждую из встроенных групп привилегий.

Уровень коллекции

  • CollectionReadOnly (COLL_RO): включает привилегии на чтение данных коллекции

  • CollectionReadWrite (COLL_RW): включает привилегии на чтение и запись данных коллекции

  • CollectionAdmin (COLL_ADMIN): включает привилегии на чтение и запись данных коллекции и управление коллекциями.

В таблице ниже перечислены конкретные привилегии, включенные в три встроенные группы привилегий на уровне коллекции:

Привилегия

CollectionReadOnly

CollectionReadWrite

CollectionAdmin

Запрос

✔️

✔️

✔️

Поиск

✔️

✔️

✔️

IndexDetail

✔️

✔️

✔️

GetFlushState

✔️

✔️

✔️

GetLoadState

✔️

✔️

✔️

GetLoadingProgress

✔️

✔️

✔️

HasPartition

✔️

✔️

✔️

ShowPartitions

✔️

✔️

✔️

ListAliases

✔️

✔️

✔️

DescribeCollection

✔️

✔️

✔️

DescribeAlias

✔️

✔️

✔️

GetStatistics

✔️

✔️

✔️

CreateIndex

✔️

✔️

DropIndex

✔️

✔️

CreatePartition

✔️

✔️

DropPartition

✔️

✔️

Загрузить

✔️

✔️

Освобождение

✔️

✔️

Вставить

✔️

✔️

Удалить

✔️

✔️

Upsert

✔️

✔️

Импорт

✔️

✔️

Промывка

✔️

✔️

Уплотнение

✔️

✔️

LoadBalance

✔️

✔️

CreateAlias

✔️

DropAlias

✔️

Уровень базы данных

  • DatabaseReadOnly (DB_RO): включает привилегии на чтение данных базы данных

  • DatabaseReadWrite (DB_RW): включает привилегии на чтение и запись данных базы данных

  • DatabaseAdmin (DB_Admin): включает привилегии на чтение и запись данных базы данных и управление базами данных.

В таблице ниже перечислены конкретные привилегии, входящие в три встроенные группы привилегий на уровне базы данных:

Привилегия

DatabaseReadOnly

DatabaseReadWrite

DatabaseAdmin

ShowCollections

✔️

✔️

✔️

Описать базу данных

✔️

✔️

✔️

CreateCollection

✔️

✔️

✔️

DropCollection

✔️

AlterDatabase

✔️

✔️

Уровень кластера

  • ClusterReadOnly (Cluster_RO): включает привилегии на чтение данных экземпляра

  • ClusterReadWrite (Cluster_RW): включает привилегии на чтение и запись данных экземпляра

  • ClusterAdmin (Cluster_Admin): включает привилегии для чтения и записи данных экземпляра и управления экземплярами.

В таблице ниже перечислены конкретные привилегии, включенные в три встроенные группы привилегий на уровне экземпляра:

Привилегия

ClusterReadOnly

ClusterReadWrite

ClusterAdmin

ListDatabases

✔️

✔️

✔️

RenameCollection

✔️

CreateOwnership

✔️

UpdateUser

✔️

DropOwnership

✔️

SelectOwnership

✔️

✔️

✔️

ManageOwnership

✔️

SelectUser

✔️

✔️

✔️

BackupRBAC

✔️

RestoreRBAC

✔️

CreateResourceGroup

✔️

DropResourceGroup

✔️

UpdateResourceGroups

✔️

✔️

DescribeResourceGroup

✔️

✔️

✔️

ListResourceGroups

✔️

✔️

✔️

TransferNode

✔️

✔️

TransferReplica

✔️

✔️

Создать базу данных

✔️

DropDatabase

✔️

FlushAll

✔️

✔️

CreatePrivilegeGroup

✔️

DropPrivilegeGroup

✔️

ListPrivilegeGroups

✔️

OperatePrivilegeGroup

✔️

Процедуры

Вы можете создать группу привилегий, а затем добавить привилегии в группу привилегий.

Создание группы привилегий

В следующем примере показано, как создать группу привилегий с именем 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"
}'

Добавление привилегий в группу привилегий

В следующем примере показано, как добавить привилегии PrivilegeBackupRBAC и PrivilegeRestoreRBAC в только что созданную группу привилегий privilege_group_1.

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"]
}'

Удаление привилегий из группы привилегий

В следующем примере показано, как удалить привилегию PrivilegeRestoreRBAC из группы привилегий 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"]
}'

Список групп привилегий

Следующий пример демонстрирует, как перечислить все существующие группы привилегий.

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 '{}'

Ниже приведен пример вывода.

PrivilegeGroupItem: <privilege_group:privilege_group_1>, <privileges:('Search', 'Query')>

Сбросить группу привилегий

В следующем примере показано, как удалить группу привилегий 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"
}'

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?