Создание группы привилегий
Чтобы упростить процесс предоставления привилегий, рекомендуется объединить несколько привилегий в группу привилегий.
Группа привилегий по сравнению с привилегиями
Группа привилегий состоит из нескольких привилегий.
Иллюстрация группы привилегий
Как показано на рисунке выше, предположим, что вам нужно предоставить три различные привилегии для роли.
Если вы не используете группу привилегий, вам нужно предоставить привилегии три раза.
Если вы используете группу привилегий, вам нужно только создать группу привилегий, добавить три привилегии в эту группу привилегий и предоставить группу привилегий роли A.
Используя группу привилегий, вы можете предоставить роли несколько привилегий в совокупности.
Встроенные группы привилегий
Для простоты использования Milvus предоставляет в общей сложности 9 встроенных привилегий на уровне коллекции, базы данных и экземпляра: COLL_RO, COLL_RW, COLL_ADMIN, DB_RO, DB_RW, DB_Admin, Cluster_RO, Cluster_RW и Cluster_Admin.
Три уровня встроенных групп привилегий не имеют каскадной зависимости. Установка группы привилегий на уровне экземпляра не приводит к автоматическому установлению разрешений для всех баз данных и коллекций под этим экземпляром. Привилегии на уровне баз данных и коллекций необходимо устанавливать вручную.
В следующих таблицах описаны привилегии, включенные в каждую из встроенных групп привилегий.
Уровень коллекции
COLL_RO: включает привилегии на чтение данных коллекции
COLL_RW: включает привилегии на чтение и запись данных коллекции
COLL_ADMIN: включает привилегии на чтение и запись данных коллекции и управление коллекциями.
В таблице ниже перечислены конкретные привилегии, включенные в три встроенные группы привилегий на уровне коллекции.
Привилегия | CollectionReadOnly | CollectionReadWrite | CollectionAdmin |
---|---|---|---|
Запрос | ✔️ | ✔️ | ✔️ |
Поиск | ✔️ | ✔️ | ✔️ |
IndexDetail | ✔️ | ✔️ | ✔️ |
GetFlushState | ✔️ | ✔️ | ✔️ |
GetLoadState | ✔️ | ✔️ | ✔️ |
GetLoadingProgress | ✔️ | ✔️ | ✔️ |
HasPartition | ✔️ | ✔️ | ✔️ |
ShowPartitions | ✔️ | ✔️ | ✔️ |
ListAliases | ✔️ | ✔️ | ✔️ |
DescribeCollection | ✔️ | ✔️ | ✔️ |
DescribeAlias | ✔️ | ✔️ | ✔️ |
GetStatistics | ✔️ | ✔️ | ✔️ |
CreateIndex | ❌ | ✔️ | ✔️ |
DropIndex | ❌ | ✔️ | ✔️ |
CreatePartition | ❌ | ✔️ | ✔️ |
DropPartition | ❌ | ✔️ | ✔️ |
Загрузить | ❌ | ✔️ | ✔️ |
Освобождение | ❌ | ✔️ | ✔️ |
Вставить | ❌ | ✔️ | ✔️ |
Удалить | ❌ | ✔️ | ✔️ |
Upsert | ❌ | ✔️ | ✔️ |
Импорт | ❌ | ✔️ | ✔️ |
Промывка | ❌ | ✔️ | ✔️ |
Уплотнение | ❌ | ✔️ | ✔️ |
LoadBalance | ❌ | ✔️ | ✔️ |
CreateAlias | ❌ | ❌ | ✔️ |
DropAlias | ❌ | ❌ | ✔️ |
Уровень базы данных
DB_RO: включает привилегии на чтение данных базы данных
DB_RW: включает привилегии на чтение и запись данных базы данных
DB_Admin: включает привилегии на чтение и запись данных базы данных и управление базами данных.
В таблице ниже перечислены конкретные привилегии, включенные в три встроенные группы привилегий на уровне базы данных.
Привилегия | DatabaseReadOnly | DatabaseReadWrite | DatabaseAdmin |
---|---|---|---|
ShowCollections | ✔️ | ✔️ | ✔️ |
Описать базу данных | ✔️ | ✔️ | ✔️ |
CreateCollection | ❌ | ❌ | ✔️ |
DropCollection | ❌ | ❌ | ✔️ |
AlterDatabase | ❌ | ✔️ | ✔️ |
Уровень кластера
Cluster_RO: включает привилегии на чтение данных экземпляра
Cluster_RW: включает привилегии на чтение и запись данных экземпляра
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_privileg_group(group_name='privilege_group_1')
import io.milvus.v2.service.rbac.request.CreatePrivilegeGroupReq;
client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.CreatePrivilegeGroup(context.Background(), "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 io.milvus.v2.service.rbac.request.AddPrivilegesToGroupReq;
client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Arrays.asList("Query", "Search"))
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.AddPrivilegesToGroup(context.Background(), "privilege_group_1", []string{"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 io.milvus.v2.service.rbac.request.RemovePrivilegesFromGroupReq;
client.removePrivilegesFromGroup(RemovePrivilegesFromGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Collections.singletonList("Search"))
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.RemovePrivilegesFromGroup(context.Background(), "privilege_group_1", []string{"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 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();
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.ListPrivilegeGroups(context.Background())
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 io.milvus.v2.service.rbac.request.DropPrivilegeGroupReq;
client.dropPrivilegeGroup(DropPrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
import "github.com/milvus-io/milvus-sdk-go/v2/client"
client.DropPrivilegeGroup(context.Background(), "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"
}'