Rechte oder Rechtegruppen für Rollen erteilen
Sobald eine Rolle erstellt ist, können Sie dieser Rolle Rechte gewähren. In diesem Handbuch wird erläutert, wie Sie einer Rolle Rechte oder Rechtegruppen gewähren.
Gewähren Sie einer Rolle ein Recht oder eine Gruppe von Rechten
Milvus 2.5 führt eine neue Version der API ein, die die Erteilungsoperation rationalisiert. Sie müssen nicht mehr den Objekttyp nachschlagen, wenn Sie einer Rolle ein Recht gewähren. Im Folgenden sind die Parameter und die entsprechenden Erklärungen aufgeführt.
role_name: Der Name der Zielrolle, für die ein oder mehrere Privileg(e) oder eine oder mehrere Privileggruppen gewährt werden sollen.
Ressource: Die Zielressource eines Zugriffsrechts, die eine bestimmte Instanz, Datenbank oder Sammlung sein kann.
Die folgende Tabelle erläutert, wie die Ressource in der Methode client.grantV2() anzugeben ist.
Ebene |
Ressource |
Erteilung Methode |
Hinweise |
|---|---|---|---|
Sammlung |
Eine bestimmte Sammlung |
|
Geben Sie den Namen Ihrer Zielsammlung und den Namen der Datenbank ein, zu der die Zielsammlung gehört. |
Alle Sammlungen unter einer bestimmten Datenbank |
|
Geben Sie den Namen der Zieldatenbank und einen Platzhalter |
|
Datenbank |
Eine bestimmte Datenbank |
|
Geben Sie den Namen Ihrer Zieldatenbank und einen Platzhalter |
Alle Datenbanken unter der aktuellen Instanz |
|
Geben Sie als Datenbanknamen |
|
Instanz |
Die aktuelle Instanz |
|
Geben Sie als Datenbanknamen |
Privileg: Die spezifische Berechtigung oder Berechtigungsgruppe, die Sie einer Rolle gewähren müssen. Derzeit bietet Milvus 56 Arten von Privilegien, die Sie gewähren können. In der folgenden Tabelle sind die Privilegien in Milvus aufgeführt.
Die Spalte "Typ" in der Tabelle dient dazu, Ihnen die schnelle Suche nach Privilegien zu erleichtern und wird nur zu Klassifizierungszwecken verwendet. Bei der Erteilung von Privilegien müssen Sie die Typen nicht verstehen. Sie müssen nur die entsprechenden Berechtigungen eingeben.
Typ
Privileg
Beschreibung
Entsprechende API-Beschreibung auf der Client-Seite
Datenbank-Privilegien
ListDatabases
Alle Datenbanken in der aktuellen Instanz anzeigen
DescribeDatabase
Zeigt die Details einer Datenbank an
CreateDatabase
Erstellen einer Datenbank
DropDatabase
Löschen einer Datenbank
AlterDatabase
Ändern der Eigenschaften einer Datenbank
Sammlung Privilegien
GetFlushState
Überprüfen des Status des Flush-Vorgangs der Sammlung
GetLoadState
Überprüfung des Ladestatus einer Sammlung
GetLoadingProgress
Überprüfung des Ladefortschritts einer Sammlung
ShowCollections
Alle Sammlungen mit Sammlungsprivilegien anzeigen
ListAliases
Alle Aliasnamen einer Sammlung anzeigen
DescribeCollection
Anzeigen der Details einer Sammlung
DescribeAlias
Zeigt die Details eines Alias an
GetStatistics
Abrufen der Statistiken einer Sammlung (z. B. die Anzahl der Entitäten in einer Sammlung)
CreateCollection
Erstellen einer Sammlung
DropCollection
Verwerfen einer Sammlung
Laden
Laden einer Sammlung
Freigeben
Freigeben einer Sammlung
Flush
Persistieren aller Entitäten in einer Sammlung in einem versiegelten Segment. Jede Entität, die nach der Flush-Operation eingefügt wird, wird in einem neuen Segment gespeichert.
Verdichtung
Manuelles Auslösen der Verdichtung
RenameCollection
Umbenennen einer Sammlung
CreateAlias
Erzeugen eines Alias für eine Sammlung
DropAlias
Den Alias einer Sammlung löschen
FlushAll
Alle Sammlungen in einer Datenbank leeren
Partitionierung Privilegien
HasPartition
Prüfen, ob eine Partition existiert
ShowPartitions
Alle Partitionen in einer Sammlung anzeigen
CreatePartition
Eine Partition erstellen
DropPartition
Verwerfen einer Partition
Index-Privilegien
IndexDetail
Anzeigen der Details eines Indexes
CreateIndex
Erzeugen eines Indexes
DropIndex
Verwerfen eines Index
Privilegien für die Ressourcenverwaltung
LoadBalance
Lastausgleich erreichen
CreateResourceGroup
Eine Ressourcengruppe erstellen
DropResourceGroup
Verwerfen einer Ressourcengruppe
UpdateResourceGroups
Aktualisieren einer Ressourcengruppe
DescribeResourceGroup
Anzeigen der Details einer Ressourcengruppe
ListResourceGroups
Alle Ressourcengruppen der aktuellen Instanz anzeigen
TransferKnoten
Übertragen von Knoten zwischen Ressourcengruppen
TransferReplica
Replikate zwischen Ressourcengruppen übertragen
SicherungRBAC
Erstellen eines Backups für alle RBAC-bezogenen Vorgänge in der aktuellen Instanz
BackupRBAC
WiederherstellenRBAC
Wiederherstellen eines Backups aller RBAC-bezogenen Vorgänge in der aktuellen Instanz
WiederherstellenRBAC
Entität Privilegien
Abfrage
Durchführen einer Abfrage
Suche
Durchführen einer Suche
einfügen
Entitäten einfügen
Löschen
Entitäten löschen
Upsertieren
Upsert Entitäten
Importieren
Masseneinfügung oder Massenimport von Entitäten
RBAC-Berechtigungen
CreateOwnership
Erstellen eines Benutzers oder einer Rolle
UpdateUser
Aktualisieren des Passworts eines Benutzers
DropOwnership
Löschen eines Benutzerkennworts oder einer Rolle
SelectOwnership
Alle Benutzer anzeigen, denen eine bestimmte Rolle zugewiesen wurde
ManageOwnership
Verwalten eines Benutzers oder einer Rolle oder Erteilen einer Rolle an einen Benutzer
SelectUser
Alle einem Benutzer zugewiesenen Rollen anzeigen
CreatePrivilegeGroup
Eine Privilegiengruppe erstellen
DropPrivilegeGroup
Löschen einer Berechtigungsgruppe
ListPrivilegeGroups
Alle Berechtigungsgruppen in der aktuellen Instanz anzeigen
OperatePrivilegeGroup
Hinzufügen von Privilegien zu oder Entfernen von Privilegien aus einer Privilegiengruppe
Das folgende Beispiel zeigt, wie man der Rolle role_a das Privileg PrivilegeSearch auf collection_01 unter der Datenbank default sowie eine Privilegiengruppe namens privilege_group_1 gewährt.
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":"*"
}'
Beschreiben einer Rolle
Das folgende Beispiel zeigt, wie man die der Rolle role_a gewährten Privilegien mit der Methode describe_role anzeigen kann.
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"
}'
Unten sehen Sie ein Beispiel für die Ausgabe.
{
"role": "role_a",
"privileges": [
{
"collection_name": "collection_01",
"db_name": "default",
"role_name": "role_a",
"privilege": "Search",
"grantor_name": "root"
},
"privilege_group_1"
]
}
Entzug eines Privilegs oder einer Privilegiengruppe von einer Rolle
Das folgende Beispiel zeigt, wie das Privileg PrivilegeSearch auf collection_01 unter der Datenbank default sowie die Privilegiengruppe privilege_group_1, die der Rolle role_a gewährt wurden, entzogen werden können.
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":"*"
}'