Предоставление привилегий или групп привилегий ролям
После создания роли вы можете предоставить ей привилегии. В этом руководстве описано, как предоставлять привилегии или группы привилегий роли.
Предоставление привилегии или группы привилегий роли
В Milvus 2.5 представлена новая версия API, которая упрощает операцию предоставления привилегий. Вам больше не нужно искать тип объекта при предоставлении привилегии роли. Ниже перечислены параметры и соответствующие пояснения.
Имя_роли: имя целевой роли, которой необходимо предоставить привилегию(и) или группу(ы) привилегий.
Ресурс: Целевой ресурс привилегии, который может быть конкретным экземпляром, базой данных или коллекцией.
В следующей таблице объясняется, как указать ресурс в методе client.grantV2().
Уровень |
Ресурс |
Метод предоставления |
Примечания |
|---|---|---|---|
Коллекция |
Определенная коллекция |
|
Введите имя целевой коллекции и имя базы данных, к которой принадлежит целевая коллекция. |
Все коллекции в определенной базе данных |
|
Введите имя целевой базы данных и подстановочный знак |
|
База данных |
Определенная база данных |
|
Введите имя целевой базы данных и подстановочный знак |
Все базы данных под текущим экземпляром |
|
Введите |
|
Экземпляр |
Текущий экземпляр |
|
Введите |
Привилегия: Конкретная привилегия или группа привилегий, которые необходимо предоставить роли. В настоящее время Milvus предоставляет 56 типов привилегий, которые вы можете назначить. В таблице ниже перечислены привилегии в Milvus.
Колонка типа в таблице ниже является пользовательской для облегчения быстрого поиска привилегий и используется только в целях классификации. При назначении привилегий вам не нужно разбираться в типах. Вам просто нужно ввести соответствующие привилегии.
Тип
Привилегия
Описание
Соответствующее описание API на стороне клиента
Привилегии базы данных
ListDatabases
Просмотр всех баз данных в текущем экземпляре
DescribeDatabase
Просмотр сведений о базе данных
CreateDatabase
Создание базы данных
DropDatabase
Сбросить базу данных
AlterDatabase
Изменение свойств базы данных
Привилегии коллекции
GetFlushState
Проверка состояния операции промывки коллекции
GetLoadState
Проверка состояния загрузки коллекции
GetLoadingProgress
Проверка хода загрузки коллекции
ShowCollections
Просмотр всех коллекций с привилегиями коллекционирования
ListAliases
Просмотр всех псевдонимов коллекции
DescribeCollection
Просмотр подробной информации о коллекции
DescribeAlias
Просмотр сведений о псевдониме
GetStatistics
Получение статистики коллекции (например, количество сущностей в коллекции)
CreateCollection
Создать коллекцию
DropCollection
Сбросить коллекцию
Загрузить
Загрузить коллекцию
Освободить
Освободить коллекцию
Промыть
Сохраняет все сущности в коллекции в запечатанном сегменте. Любая сущность, вставленная после операции flush, будет сохранена в новом сегменте.
Compaction
Ручной запуск уплотнения
RenameCollection
Переименование коллекции
CreateAlias
Создание псевдонима для коллекции
DropAlias
Удалить псевдоним коллекции
FlushAll
Промыть все коллекции в базе данных
Привилегии разделов
HasPartition
Проверяет, существует ли раздел
ShowPartitions
Просмотр всех разделов в коллекции
CreatePartition
Создать раздел
DropPartition
Сбросить раздел
Привилегии индекса
IndexDetail
Просмотр подробной информации об индексе
CreateIndex
Создать индекс
DropIndex
Сбросить индекс
Привилегии управления ресурсами
LoadBalance
Достижение баланса нагрузки
CreateResourceGroup
Создание группы ресурсов
DropResourceGroup
Сбросить группу ресурсов
UpdateResourceGroups
Обновление группы ресурсов
DescribeResourceGroup
Просмотр подробной информации о группе ресурсов
ListResourceGroups
Просмотр всех групп ресурсов текущего экземпляра
TransferNode
Передача узлов между группами ресурсов
TransferReplica
Передача реплик между группами ресурсов
BackupRBAC
Создание резервной копии для всех операций, связанных с RBAC, в текущем экземпляре
BackupRBAC
RestoreRBAC
Восстановление резервной копии всех операций, связанных с RBAC, в текущем экземпляре
RestoreRBAC
Привилегии сущности
Запрос
Выполнить запрос
Поиск
Провести поиск
Вставка
Вставка сущностей
Удалить
Удалить сущности
Upsert
Upsert сущности
Импорт
Массовая вставка или импорт сущностей
Привилегии RBAC
CreateOwnership
Создание пользователя или роли
UpdateUser
Обновление пароля пользователя
DropOwnership
Сбросить пароль пользователя или роль
SelectOwnership
Просмотр всех пользователей, которым предоставлена определенная роль
ManageOwnership
Управление пользователем или ролью или предоставление роли пользователю
SelectUser
Просмотр всех ролей, предоставленных пользователю
CreatePrivilegeGroup
Создание группы привилегий
DropPrivilegeGroup
Удалить группу привилегий
ListPrivilegeGroups
Просмотр всех групп привилегий в текущем экземпляре
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":"*"
}'