Предоставление привилегий или групп привилегий ролям

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

Предоставление привилегии или группы привилегий роли

В Milvus 2.5 представлена новая версия API, которая упрощает операцию предоставления привилегий. Вам больше не нужно искать тип объекта при предоставлении привилегии роли. Ниже перечислены параметры и соответствующие пояснения.

  • Имя_роли: имя целевой роли, которой необходимо предоставить привилегию(и) или группу(ы) привилегий.

  • Ресурс: Целевой ресурс привилегии, который может быть конкретным экземпляром, базой данных или коллекцией.

В следующей таблице объясняется, как указать ресурс в методе client.grantV2().

Уровень

Ресурс

Метод предоставления

Примечания

Коллекция

Определенная коллекция

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="CollectionAdmin",
     collection_name="col1", 
     db_name="db1"
 )

Введите имя целевой коллекции и имя базы данных, к которой принадлежит целевая коллекция.

Все коллекции в определенной базе данных

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="CollectionAdmin",
     collection_name="*", 
     db_name="db1"
 )

Введите имя целевой базы данных и подстановочный знак * в качестве имени коллекции.

База данных

Определенная база данных

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="DatabaseAdmin", 
     collection_name="*", 
     db_name="db1"
 )

Введите имя целевой базы данных и подстановочный знак * в качестве имени коллекции.

Все базы данных под текущим экземпляром

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="DatabaseAdmin", 
     collection_name="*", 
     db_name="*"
 )

Введите * в качестве имени базы данных и * в качестве имени коллекции.

Экземпляр

Текущий экземпляр

 client.grant_privilege_v2(
     role_name="roleA", 
     privilege="ClusterAdmin", 
     collection_name="*", 
     db_name="*"
 )

Введите * в качестве имени базы данных и * в качестве имени коллекции.

  • Привилегия: Конкретная привилегия или группа привилегий, которые необходимо предоставить роли. В настоящее время Milvus предоставляет 56 типов привилегий, которые вы можете назначить. В таблице ниже перечислены привилегии в Milvus.

    Колонка типа в таблице ниже является пользовательской для облегчения быстрого поиска привилегий и используется только в целях классификации. При назначении привилегий вам не нужно разбираться в типах. Вам просто нужно ввести соответствующие привилегии.

    Тип

    Привилегия

    Описание

    Соответствующее описание API на стороне клиента

    Привилегии базы данных

    ListDatabases

    Просмотр всех баз данных в текущем экземпляре

    ListDatabases

    DescribeDatabase

    Просмотр сведений о базе данных

    DescribeDatabase

    CreateDatabase

    Создание базы данных

    CreateDatabase

    DropDatabase

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

    DropDatabase

    AlterDatabase

    Изменение свойств базы данных

    AlterDatabase

    Привилегии коллекции

    GetFlushState

    Проверка состояния операции промывки коллекции

    GetFlushState

    GetLoadState

    Проверка состояния загрузки коллекции

    GetLoadState

    GetLoadingProgress

    Проверка хода загрузки коллекции

    GetLoadingProgress

    ShowCollections

    Просмотр всех коллекций с привилегиями коллекционирования

    ShowCollections

    ListAliases

    Просмотр всех псевдонимов коллекции

    ListAliases

    DescribeCollection

    Просмотр подробной информации о коллекции

    DescribeCollection

    DescribeAlias

    Просмотр сведений о псевдониме

    DescribeAlias

    GetStatistics

    Получение статистики коллекции (например, количество сущностей в коллекции)

    GetCollectionStatistics

    CreateCollection

    Создать коллекцию

    CreateCollection

    DropCollection

    Сбросить коллекцию

    DropCollection

    Загрузить

    Загрузить коллекцию

    LoadCollection/GetLoadingProgress/GetLoadState

    Освободить

    Освободить коллекцию

    ReleaseCollection

    Промыть

    Сохраняет все сущности в коллекции в запечатанном сегменте. Любая сущность, вставленная после операции flush, будет сохранена в новом сегменте.

    Flush/GetFlushState

    Compaction

    Ручной запуск уплотнения

    Уплотнение

    RenameCollection

    Переименование коллекции

    RenameCollection

    CreateAlias

    Создание псевдонима для коллекции

    CreateAlias

    DropAlias

    Удалить псевдоним коллекции

    DropAlias

    FlushAll

    Промыть все коллекции в базе данных

    FlushAll

    Привилегии разделов

    HasPartition

    Проверяет, существует ли раздел

    HasPartition

    ShowPartitions

    Просмотр всех разделов в коллекции

    ShowPartitions

    CreatePartition

    Создать раздел

    CreatePartition

    DropPartition

    Сбросить раздел

    DropPartition

    Привилегии индекса

    IndexDetail

    Просмотр подробной информации об индексе

    DescribeIndex/GetIndexState/GetIndexBuildProgress

    CreateIndex

    Создать индекс

    CreateIndex

    DropIndex

    Сбросить индекс

    DropIndex

    Привилегии управления ресурсами

    LoadBalance

    Достижение баланса нагрузки

    LoadBalance

    CreateResourceGroup

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

    CreateResourceGroup

    DropResourceGroup

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

    DropResourceGroup

    UpdateResourceGroups

    Обновление группы ресурсов

    UpdateResourceGroups

    DescribeResourceGroup

    Просмотр подробной информации о группе ресурсов

    DescribeResourceGroup

    ListResourceGroups

    Просмотр всех групп ресурсов текущего экземпляра

    ListResourceGroups

    TransferNode

    Передача узлов между группами ресурсов

    TransferNode

    TransferReplica

    Передача реплик между группами ресурсов

    TransferReplica

    BackupRBAC

    Создание резервной копии для всех операций, связанных с RBAC, в текущем экземпляре

    BackupRBAC

    RestoreRBAC

    Восстановление резервной копии всех операций, связанных с RBAC, в текущем экземпляре

    RestoreRBAC

    Привилегии сущности

    Запрос

    Выполнить запрос

    Запрос

    Поиск

    Провести поиск

    Поиск

    Вставка

    Вставка сущностей

    Вставить

    Удалить

    Удалить сущности

    Удалить

    Upsert

    Upsert сущности

    Upsert

    Импорт

    Массовая вставка или импорт сущностей

    BulkInsert/Import

    Привилегии RBAC

    CreateOwnership

    Создание пользователя или роли

    CreateUser/CreateRole

    UpdateUser

    Обновление пароля пользователя

    UpdateCredential

    DropOwnership

    Сбросить пароль пользователя или роль

    DeleteCredential/DropRole

    SelectOwnership

    Просмотр всех пользователей, которым предоставлена определенная роль

    SelectRole/SelectGrant

    ManageOwnership

    Управление пользователем или ролью или предоставление роли пользователю

    OperateUserRole/OperatePrivilege/OperatePrivilegeV2

    SelectUser

    Просмотр всех ролей, предоставленных пользователю

    SelectUser

    CreatePrivilegeGroup

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

    CreatePrivilegeGroup

    DropPrivilegeGroup

    Удалить группу привилегий

    DropPrivilegeGroup

    ListPrivilegeGroups

    Просмотр всех групп привилегий в текущем экземпляре

    ListPrivilegeGroups

    OperatePrivilegeGroup

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

    OperatePrivilegeGroup

В следующем примере показано, как предоставить привилегию PrivilegeSearch на collection_01 в базе данных default, а также группу привилегий privilege_group_1 для роли 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" \
-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":"*"
}'

Описать роль

Следующий пример демонстрирует, как просмотреть привилегии, предоставленные роли role_a, используя метод 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" \
-d '{
    "roleName": "role_a"
}'

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

{
     "role": "role_a",
     "privileges": [
         {
             "collection_name": "collection_01",
             "db_name": "default",
             "role_name": "role_a",
             "privilege": "Search",
             "grantor_name": "root"
         },
         "privilege_group_1"
     ]
}

Отмена привилегии или группы привилегий у роли

В следующем примере показано, как отозвать привилегию PrivilegeSearch на collection_01 в базе данных default, а также группу привилегий privilege_group_1, которые были предоставлены роли 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" \
-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":"*"
}'

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

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

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

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