🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Руководство по администрированию
  • Home
  • Docs
  • Руководство по администрированию

  • Безопасность

  • Включить RBAC

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

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

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

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

В 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="*")

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

**Instance**

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

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

Загрузить

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

Освободить

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

ReleaseCollection

Промыть

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

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

Описать роль

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

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

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

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

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

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

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