권한 그룹 만들기
권한을 부여하는 프로세스를 간소화하려면 여러 권한을 하나의 권한 그룹으로 결합하는 것이 좋습니다.
권한 그룹과 권한 비교
권한 그룹은 여러 권한으로 구성됩니다.
권한 그룹 예시
위 그림과 같이 한 역할에 세 가지 다른 권한을 부여해야 한다고 가정해 보겠습니다.
권한 그룹을 사용하지 않는 경우에는 권한을 세 번 부여해야 합니다.
권한 그룹을 사용하는 경우에는 권한 그룹을 만든 다음 이 권한 그룹에 세 가지 권한을 추가하고 역할 A에 권한 그룹을 부여하기만 하면 됩니다.
권한 그룹을 사용하면 한 역할에 여러 권한을 일괄적으로 부여할 수 있습니다.
기본 제공 권한 그룹
Milvus는 사용 편의성을 위해 컬렉션, 데이터베이스, 인스턴스 수준에서 총 9개의 기본 제공 권한을 제공합니다: COLL_RO, COLL_RW, COLL_ADMIN, DB_RO, DB_RW, DB_Admin, Cluster_RO, Cluster_RW 및 Cluster_Admin입니다.
기본 제공 권한 그룹의 세 가지 수준은 계단식 관계가 없습니다. 인스턴스 수준에서 권한 그룹을 설정한다고 해서 해당 인스턴스 아래의 모든 데이터베이스 및 컬렉션에 대한 권한이 자동으로 설정되는 것은 아닙니다. 데이터베이스 및 컬렉션 수준에서의 권한은 수동으로 설정해야 합니다.
다음 표에서는 각 기본 제공 권한 그룹에 포함된 권한에 대해 설명합니다.
컬렉션 수준
CollectionReadOnly(COLL_RO): 컬렉션 데이터를 읽을 수 있는 권한이 포함됩니다.
CollectionReadWrite(COLL_RW): 컬렉션 데이터를 읽고 쓸 수 있는 권한 포함
CollectionAdmin(COLL_ADMIN): 컬렉션 데이터를 읽고 쓸 수 있는 권한과 컬렉션을 관리할 수 있는 권한이 포함됩니다.
아래 표에는 컬렉션 수준에서 세 가지 기본 제공 권한 그룹에 포함된 특정 권한이 나열되어 있습니다:
권한 |
컬렉션 읽기 전용 |
컬렉션 읽기/쓰기 |
CollectionAdmin |
|---|---|---|---|
Query |
✔️ |
✔️ |
✔️ |
검색 |
✔️ |
✔️ |
✔️ |
IndexDetail |
✔️ |
✔️ |
✔️ |
GetFlushState |
✔️ |
✔️ |
✔️ |
GetLoadState |
✔️ |
✔️ |
✔️ |
GetLoadingProgress |
✔️ |
✔️ |
✔️ |
HasPartition |
✔️ |
✔️ |
✔️ |
ShowPartitions |
✔️ |
✔️ |
✔️ |
ListAliases |
✔️ |
✔️ |
✔️ |
DescribeCollection |
✔️ |
✔️ |
✔️ |
DescribeAlias |
✔️ |
✔️ |
✔️ |
GetStatistics |
✔️ |
✔️ |
✔️ |
CreateIndex |
❌ |
✔️ |
✔️ |
DropIndex |
❌ |
✔️ |
✔️ |
CreatePartition |
❌ |
✔️ |
✔️ |
DropPartition |
❌ |
✔️ |
✔️ |
Load |
❌ |
✔️ |
✔️ |
릴리스 |
❌ |
✔️ |
✔️ |
Insert |
❌ |
✔️ |
✔️ |
삭제 |
❌ |
✔️ |
✔️ |
Upsert |
❌ |
✔️ |
✔️ |
Import |
❌ |
✔️ |
✔️ |
Flush |
❌ |
✔️ |
✔️ |
Compaction |
❌ |
✔️ |
✔️ |
LoadBalance |
❌ |
✔️ |
✔️ |
CreateAlias |
❌ |
❌ |
✔️ |
DropAlias |
❌ |
❌ |
✔️ |
데이터베이스 수준
데이터베이스 읽기 전용(DB_RO): 데이터베이스 데이터를 읽을 수 있는 권한을 포함합니다.
데이터베이스 읽기/쓰기(DB_RW): 데이터베이스 데이터를 읽고 쓸 수 있는 권한 포함
DatabaseAdmin(DB_Admin): 데이터베이스 데이터를 읽고 쓸 수 있는 권한과 데이터베이스를 관리하는 권한이 포함됩니다.
아래 표에는 데이터베이스 수준에서 세 가지 기본 제공 권한 그룹에 포함된 특정 권한이 나열되어 있습니다:
권한 |
데이터베이스 읽기 전용 |
데이터베이스 읽기/쓰기 |
DatabaseAdmin |
|---|---|---|---|
ShowCollections |
✔️ |
✔️ |
✔️ |
데이터베이스 설명 |
✔️ |
✔️ |
✔️ |
CreateCollection |
✔️ |
✔️ |
✔️ |
DropCollection |
❌ |
❌ |
✔️ |
AlterDatabase |
❌ |
✔️ |
✔️ |
클러스터 수준
클러스터 읽기 전용(Cluster_RO): 인스턴스 데이터를 읽을 수 있는 권한을 포함합니다.
ClusterReadWrite(Cluster_RW): 인스턴스 데이터를 읽고 쓸 수 있는 권한을 포함합니다.
ClusterAdmin(Cluster_Admin): 인스턴스 데이터 읽기 및 쓰기 권한과 인스턴스 관리 권한이 포함됩니다.
아래 표에는 인스턴스 수준에서 세 가지 기본 제공 권한 그룹에 포함된 특정 권한이 나열되어 있습니다:
권한 |
클러스터 읽기 전용 |
ClusterReadWrite |
ClusterAdmin |
|---|---|---|---|
ListDatabases |
✔️ |
✔️ |
✔️ |
RenameCollection |
❌ |
❌ |
✔️ |
CreateOwnership |
❌ |
❌ |
✔️ |
UpdateUser |
❌ |
❌ |
✔️ |
DropOwnership |
❌ |
❌ |
✔️ |
SelectOwnership |
✔️ |
✔️ |
✔️ |
ManageOwnership |
❌ |
❌ |
✔️ |
SelectUser |
✔️ |
✔️ |
✔️ |
BackupRBAC |
❌ |
❌ |
✔️ |
RestoreRBAC |
❌ |
❌ |
✔️ |
CreateResourceGroup |
❌ |
❌ |
✔️ |
DropResourceGroup |
❌ |
❌ |
✔️ |
업데이트 리소스 그룹 |
❌ |
✔️ |
✔️ |
DescribeResourceGroup |
✔️ |
✔️ |
✔️ |
리소스 그룹 나열 |
✔️ |
✔️ |
✔️ |
TransferNode |
❌ |
✔️ |
✔️ |
TransferReplica |
❌ |
✔️ |
✔️ |
CreateDatabase |
❌ |
❌ |
✔️ |
DropDatabase |
❌ |
❌ |
✔️ |
FlushAll |
❌ |
✔️ |
✔️ |
CreatePrivilegeGroup |
❌ |
❌ |
✔️ |
DropPrivilegeGroup |
❌ |
❌ |
✔️ |
ListPrivilegeGroups |
❌ |
❌ |
✔️ |
OperatePrivilegeGroup |
❌ |
❌ |
✔️ |
절차
권한 그룹을 만든 다음 권한 그룹에 권한을 추가할 수 있습니다.
권한 그룹 만들기
다음 예는 privilege_group_1 라는 권한 그룹을 만드는 방법을 보여줍니다.
from pymilvus import MilvusClient
client.create_privilege_group(group_name='privilege_group_1')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.CreatePrivilegeGroup(ctx, milvusclient.NewCreatePrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.CreatePrivilegeGroupReq;
client.createPrivilegeGroup(CreatePrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
await client.createPrivilegeGroup({
group_name: '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"
}'
권한 그룹에 권한 추가하기
다음 예는 방금 만든 권한 그룹 privilege_group_1 에 PrivilegeBackupRBAC 및 PrivilegeRestoreRBAC 권한을 추가하는 방법을 보여줍니다.
from pymilvus import MilvusClient
client.add_privileges_to_group(group_name='privilege_group_1', privileges=['Query', 'Search'])
import "github.com/milvus-io/milvus/client/v2/milvusclient"
privileges := []string{"Query", "Search"}
err = client.AddPrivilegesToGroup(ctx, milvusclient.NewAddPrivilegesToGroupOption("privilege_group_1", privileges...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.AddPrivilegesToGroupReq;
client.addPrivilegesToGroup(AddPrivilegesToGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Arrays.asList("Query", "Search"))
.build());
await client.addPrivilegesToGroup({
group_name: privilege_group_1,
privileges: ['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"]
}'
권한 그룹에서 권한 제거하기
다음 예제는 권한 그룹 privilege_group_1 에서 PrivilegeRestoreRBAC 권한을 제거하는 방법을 보여줍니다.
from pymilvus import MilvusClient
client.remove_privileges_from_group(group_name='privilege_group_1', privileges='Search')
import "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.RemovePrivilegesFromGroup(ctx, milvusclient.NewRemovePrivilegesFromGroupOption("privilege_group_1", []string{"Search"}...))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.RemovePrivilegesFromGroupReq;
client.removePrivilegesFromGroup(RemovePrivilegesFromGroupReq.builder()
.groupName("privilege_group_1")
.privileges(Collections.singletonList("Search"))
.build());
await client.removePrivilegesFromGroup({
group_name: "privilege_group_1",
privileges: ["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 "github.com/milvus-io/milvus/client/v2/milvusclient"
groups, err := client.ListPrivilegeGroups(ctx, milvusclient.NewListPrivilegeGroupsOption())
if err != nil {
fmt.Println(err.Error())
// handle error
}
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();
await client.listPrivilegeGroups();
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 "github.com/milvus-io/milvus/client/v2/milvusclient"
err = client.DropPrivilegeGroup(ctx, milvusclient.NewDropPrivilegeGroupOption("privilege_group_1"))
if err != nil {
fmt.Println(err.Error())
// handle error
}
import io.milvus.v2.service.rbac.request.DropPrivilegeGroupReq;
client.dropPrivilegeGroup(DropPrivilegeGroupReq.builder()
.groupName("privilege_group_1")
.build());
await client.dropPrivilegeGroup({group_name: '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"
}'