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