# Rollenbasierte Zugriffskontrolle (RBAC)

HINWEIS

Dieser Leitfaden gilt nur für die DB-Version 0.9.6 oder höher.

Nachdem Sie einen Cluster erstellt haben, gelten Sie als Cluster-Administrator mit den höchsten Zugriffsrechten für die Zugriffskontrolle.

TIP

Weitere Informationen finden Sie unter Verbindungsdaten für detaillierte Anweisungen zum Auffinden des Benutzernamens und des Passworts des Cluster-Administrators.

Um Ihre Cluster mit anderen Benutzern zu teilen oder bestimmten Personen nur Lesezugriff zu gewähren, können Sie die MyScale RBAC (Rollenbasierte Zugriffskontrolle) verwenden, um den Datenaustausch zwischen mehreren Benutzern zu verwalten.

HINWEIS

Über die RBAC-Funktion von MyScale erstellte Benutzer sind nicht mit Benutzern in der Webkonsole verknüpft.

# Warum ist MyScale RBAC wichtig?

Die Isolierung von Benutzern in Datenbanken und die Beschränkung des Zugriffs auf die Daten jedes Benutzers gelten als bewährte Methode und werden wie folgt erreicht:

  • Erstellen Sie eine separate Datenbank für jeden Benutzer und benennen Sie sie nach dem Benutzer.
  • Gewähren Sie alle Berechtigungen für diese jeweilige Datenbank an den Benutzer.

Auf diese Weise können Benutzer Operationen in ihren Datenbanken durchführen, wie z.B. das Erstellen von Tabellen, das Abfragen von Daten, das Löschen von Tabellen und das Ändern von Tabellenstrukturen, ohne andere Benutzer negativ zu beeinflussen. Datenbankadministratoren müssen nicht für jeden Benutzer einzeln Berechtigungen zum Erstellen von Tabellen oder Abfragen von Tabellen in der einzelnen Datenbank erteilen.

Dies beseitigt die Notwendigkeit, Benutzern jedes Mal, wenn eine neue Tabelle erstellt wird, Abfrageberechtigungen zuzuweisen, reduziert den administrativen Aufwand und stellt sicher, dass nicht autorisierte Benutzer nicht auf die Datenbank zugreifen. Wenn eine Datenfreigabe zwischen bestimmten Benutzern erforderlich ist, können Administratoren anderen Benutzern Leseberechtigungen für bestimmte Datenbanken und Tabellen gewähren.

# Verwendung von MyScale RBAC zur Verwaltung der Benutzerzugriffskontrolle

Bevor wir beschreiben, wie Sie MyScale RBAC zur Verwaltung der Benutzerzugriffskontrolle verwenden können, betrachten wir folgendes Anwendungsbeispiel.

Angenommen, die Abteilungen eines Dokumentenabrufunternehmens speichern ihre Daten in MyScale. Jede Abteilung hat mehrere Administratoren mit Lese-/Schreibrechten für die Daten ihrer Abteilung. Andere Benutzer der Abteilung haben Leseberechtigungen für diese Daten und verwenden SQL- und Vektor-Suchabfragen.

TIP

Es kann auch Fälle geben, in denen die Daten einer bestimmten Abteilung zwischen anderen Abteilungen geteilt werden müssen.

Mit den access_management-Berechtigungen ist der Cluster-Administrator dafür verantwortlich, die rollenbasierten Zugriffsberechtigungen für alle Benutzer und Rollen zu verwalten, einschließlich Aufgaben wie dem Erstellen und Gewähren von Zugriff auf Datenbanken und Datenbanktabellen.

Schauen wir uns an, wie der Cluster-Administrator RBAC (Rollenbasierte Zugriffskontrolle) in MyScale verwendet, um den Datenbankzugriff zu verwalten.

# Als Cluster-Administrator anmelden

Der erste Schritt besteht darin, sich als Cluster-Administrator in MyScale anzumelden. Hierzu stehen Ihnen folgende Optionen zur Verfügung:

  • Verwenden Sie den SQL-Arbeitsbereich in der MyScale-Webkonsole, um alle Abfragen als Cluster-Administrator auszuführen.
  • Verwenden Sie Entwicklertools wie den Python-Client und fügen Sie den Benutzernamen und das Passwort des Cluster-Administrators in Ihren Python-Code ein.

Die folgenden Szenarien beschreiben, wie der Cluster-Administrator MyScale RBAC verwendet, um rollenbasierte Benutzerzugriffsberechtigungen zu verwalten.

# Szenario 1

In diesem Szenario führt der Cluster-Administrator die folgenden Aufgaben aus:

  • Erstellt zwei Datenbanken: Abteilung_A und Abteilung_B.
  • Erstellt Administrator-Benutzer für jede Abteilungsdatenbank.
  • Legt Berechtigungen wie folgt fest:
    • Gewährt den Administrator-Benutzern von Abteilung A und B Lese-/Schreib- (oder Voll-) Zugriffsberechtigungen für ihre jeweiligen Datenbanken.
    • Gewährt Benutzern aus Abteilung A/B keine Zugriffsberechtigungen für die andere Datenbank.

Danach können die Datenbankadministratoren Tabellen in ihren jeweiligen Datenbanken erstellen.

Um diesen Vorgang zu wiederholen:

# Datenbanken erstellen

Melden Sie sich als Cluster-Administrator in MyScale an und erstellen Sie Administrator-Benutzer für die Abteilungen A und B (wie in der folgenden SQL-Anweisung beschrieben).

TIP

Verwenden Sie die Methode SHA256_hash für die Sicherheit des Passworts beim Erstellen von Benutzerkonten.

-- Erstellen Sie eine Datenbank und den entsprechenden Administrator-Benutzer für Abteilung A
CREATE DATABASE Abteilung_A ON CLUSTER '{cluster}';
-- Das Passwort für den Administrator von Abteilung A lautet 123456@Qwerty
CREATE USER Abteilung_A_Admin ON CLUSTER '{cluster}' IDENTIFIED WITH sha256_hash BY 'eccd885c4d63d89a91ee6f3f8f9f4aa1010c0e1f84b97c9d9954768ba5cc478b' DEFAULT DATABASE Abteilung_A;
-- Erstellen Sie eine Datenbank und den entsprechenden Administrator-Benutzer für Abteilung B
CREATE DATABASE Abteilung_B ON CLUSTER '{cluster}';
-- Das Passwort für den Administrator von Abteilung B lautet 123456#Qwerty
CREATE USER Abteilung_B_Admin ON CLUSTER '{cluster}' IDENTIFIED WITH sha256_hash BY '23f356509386377ebdc7298241fdce8cdef594353cd3ef787802dd86526130c5' DEFAULT DATABASE Abteilung_B;
-- Gewähren Sie dem entsprechenden Administrator-Benutzer alle Berechtigungen.
GRANT ON CLUSTER '{cluster}' ALL ON Abteilung_A.* TO Abteilung_A_Admin;
GRANT ON CLUSTER '{cluster}' ALL ON Abteilung_B.* TO Abteilung_B_Admin;

TIP

Da Benutzer mit weniger als administrativen Berechtigungen ihr eigenes Passwort nicht festlegen können, bitten Sie den Benutzer, sein Passwort mit einem Generator wie diesem (opens new window) zu hashen, bevor Sie es dem Administrator geben, um das Konto einzurichten. Die Passwörter sollten den von ClickHouse festgelegten Mindestanforderungen entsprechen, die hier (opens new window) zu finden sind.

# Tabelle für Abteilung A erstellen

Melden Sie sich als Benutzer Abteilung_A_Admin mit einem Entwicklertool bei MyScale an und erstellen Sie die Tabelle Abteilung_A.chatPDF_meta.

HINWEIS

Beachten Sie, dass der Administrator von Abteilung A sich nur über ein Entwicklertool und nicht über die Webkonsole anmelden kann, da dieser Benutzer mit MyScale RBAC erstellt wurde.

-- Tabelle erstellen.
CREATE TABLE Abteilung_A.chatPDF_meta (
    `pdf` String, 
    `title` String, 
    `authors` Array(String), 
    `abstract` String, 
    `pub_date` Nullable(Date32), 
    `doi` String, 
    `publisher` String, 
    `article_type` String, 
    `vector` Array(Float32), 
    VECTOR INDEX vec_idx vector TYPE MSTG('metric_type=Cosine'), 
    CONSTRAINT vec_len CHECK length(vector) = 512
  ) ENGINE = ReplacingMergeTree ORDER BY pdf SETTINGS index_granularity = 8192;

HINWEIS

Andere Benutzer können auf diese Tabelle nicht zugreifen oder Daten darin manipulieren, außer dem Administrator der Abteilung.

# Berechtigungen für zusätzliche Benutzer gewähren

Als Cluster-Administrator gewähren Sie anderen Benutzern Zugriffsberechtigungen, indem Sie sich bei MyScale anmelden und die folgende SQL-Anweisung ausführen, um dem Benutzer U1 SELECT-Berechtigungen zu gewähren.

-- Fügen Sie den schreibgeschützten Benutzer U1 zu Abteilung A hinzu.
CREATE USER Abteilung_A_U1 ON CLUSTER '{cluster}' IDENTIFIED WITH sha256_hash BY '20388ae66ef3c7e13dc5fe9b3808637c2d89a517d46276a7ba19bbaa488c5e78' DEFAULT DATABASE Abteilung_A;
-- Gewähren Sie dem Benutzer U1 SELECT-Berechtigung.
GRANT ON CLUSTER '{cluster}' SELECT ON Abteilung_A.chatPDF_meta TO Abteilung_A_U1;

HINWEIS

Nachdem diese SQL-Anweisung erfolgreich ausgeführt wurde, hat der Benutzer U1 von Abteilung A die Möglichkeit, Daten aus der Tabelle Abteilung_A.chatPDF_meta anzuzeigen und auszuwählen.

# Szenario 2

Der Benutzer U1 von Abteilung A hat nur Leseberechtigungen für die Tabelle chatPDF_meta. Wenn der Benutzer U1 jedoch Daten in dieser Tabelle aktualisieren muss, können ihm Lese-/Schreibberechtigungen gewährt werden.

HINWEIS

Zu diesem Zeitpunkt kann der Benutzer U1 aus Versehen keine Daten aus der Tabelle Abteilung_A.chatPDF_meta löschen.

# ALTER TABLE-Berechtigungen gewähren

Melden Sie sich als Cluster-Administrator bei MyScale an und gewähren Sie dem Benutzer U1 ALTER TABLE-Berechtigungen.

-- Gewähren Sie dem Benutzer U1 ALTER TABLE-Berechtigung.
GRANT ON CLUSTER '{cluster}' ALTER TABLE ON Abteilung_A.chatPDF_meta TO Abteilung_A_U1;

Jetzt hat der Benutzer U1 die Möglichkeit, ALTER-Operationen auf der Tabelle chatPDF_meta durchzuführen.

Um diese Berechtigungen zu widerrufen, melden Sie sich erneut als Cluster-Administrator bei MyScale an und führen Sie die folgende SQL-Anweisung aus.

REVOKE ON CLUSTER '{cluster}' ALTER TABLE ON Abteilung_A.chatPDF_meta FROM Abteilung_A_U1;

# Szenario 3

Der Administrator von Abteilung A hat die Datentabelle chatPDF_user zunächst ohne Zugriffsberechtigungen für Benutzer innerhalb der Abteilung oder externe Benutzer erstellt. Folglich können diese Benutzer keine CRUD-Operationen auf die Daten in dieser Tabelle durchführen.

Zum Beispiel:

  • Der Benutzer U1 von Abteilung A kann die Daten nicht anzeigen oder Operationen auf der Tabelle chatPDF_user durchführen.

    Abteilung_A_U1 :) SHOW TABLES FROM Abteilung_A;
    ┌─name─────────┐
    │ chatPDF_meta │
    └──────────────┘
    
  • Der Administrator von Abteilung B kann die Daten nicht anzeigen oder Operationen auf der Tabelle chatPDF_user durchführen.

    Abteilung_B_Admin :) SHOW TABLES FROM Abteilung_A;
    Ok.
    0 rows in set. Elapsed: 0.002 sec.
    

# Szenario 4

Gewähren Sie Zugriffsberechtigungen für Benutzer in Abteilungen in einem Stapel, ohne Berechtigungen für einzelne Benutzer einzeln zu gewähren. Wenn mehrere Benutzer in einer Abteilung oder Abteilungen Zugriff auf die Daten in einer Tabelle/Datenbank benötigen, ist es üblich, verschiedene operative Berechtigungen zu gruppieren und sie mit Rollen zu verwalten. Der erste Schritt besteht darin, diese Rollen zu erstellen. Sobald die Benutzerrollen erstellt wurden, besteht der nächste Schritt darin, Benutzer zusammenzufassen und sie der entsprechenden Rolle hinzuzufügen.

# Rollen erstellen

Melden Sie sich als Cluster-Administrator bei MyScale an, um die erforderlichen Rollen zu erstellen und Berechtigungen für jede Rolle zu gewähren, wie in der folgenden SQL-Anweisung beschrieben.

-- Erstellen Sie verschiedene Rollen innerhalb von Abteilung A.
CREATE ROLE Abteilung_A_Rolle_1 ON CLUSTER '{cluster}';
CREATE ROLE Abteilung_A_Rolle_2 ON CLUSTER '{cluster}';
-- Gewähren Sie entsprechende Berechtigungen für verschiedene Rollen basierend auf den Anforderungen.
GRANT ON CLUSTER '{cluster}' SELECT ON Abteilung_A.chatPDF_meta TO Abteilung_A_Rolle_1;
GRANT ON CLUSTER '{cluster}' SELECT, INSERT ON Abteilung_A.chatPDF_meta TO Abteilung_A_Rolle_2;
GRANT ON CLUSTER '{cluster}' SELECT, INSERT, ALTER TABLE ON Abteilung_A.chatPDF_user TO Abteilung_A_Rolle_2;

# Benutzer zu Rollen hinzufügen

Wenn ein neuer Benutzer U2 zu Abteilung A hinzugefügt wird, gewähren Sie ihm Lese- und Schreibberechtigungen für die Tabellen chatPDF_user und chatPDF_meta, indem Sie ihm eine Rolle zuweisen.

Zum Beispiel:

-- Fügen Sie U2 einfach der Rolle Abteilung_A_Rolle_2 hinzu.
GRANT ON CLUSTER '{cluster}' Abteilung_A_Rolle_2 TO Abteilung_A_U2;

# Szenario 5

Verwenden Sie die QUOTA-Funktion, um Benutzerkontingente und Ressourcennutzung einzuschränken. Sie können beispielsweise Grenzwerte für die maximale Ausführungszeit und die maximale Anzahl von Abfragen für eine bestimmte Rolle festlegen, wie folgt:

Melden Sie sich als Cluster-Administrator bei MyScale an, um ein Kontingent zu erstellen und das Kontingent einer Rolle zuzuweisen.

CREATE QUOTA Abteilung_A_Quota_Rolle1 ON CLUSTER '{cluster}' FOR INTERVAL 30 minute MAX execution_time = 0.5, FOR INTERVAL 5 quarter MAX queries = 321 TO Abteilung_A_Rolle_1;