Detaillierte Berechtigungen für die Zugriffssteuerung

Auf dieser Seite werden die Berechtigungen beschrieben, die Sie einer Datenbankrolle für eine detaillierte Zugriffssteuerung gewähren können. Diese Informationen gelten sowohl für Datenbanken im GoogleSQL-Dialekt als auch für Datenbanken im PostgreSQL-Dialekt.

Weitere Informationen zu Datenbankrollen und zur detaillierten Zugriffssteuerung finden Sie unter Übersicht über die detaillierte Zugriffssteuerung.

In der folgenden Tabelle sind die detaillierten Berechtigungen für die Zugriffssteuerung und die Datenbankobjekte aufgeführt, für die sie gewährt werden können.

AUSWÄHLEN INSERT AKTUALISIEREN LÖSCHEN EXECUTE Nutzung
Schema
Tabelle
Spalte
Ansehen
Stream ändern
Lesefunktion für Änderungsstream
Sequenz
Modell

In den folgenden Abschnitten finden Sie Details zu den einzelnen Berechtigungen.

SELECT

Ermöglicht der Rolle, Daten aus einer Tabelle, Ansicht, einem Änderungsstream, einer Sequenz oder einem Modell zu lesen oder abzufragen.

  • Wenn für eine Tabelle eine Spaltenliste angegeben ist, gilt die Berechtigung nur für diese Spalten. Wenn keine Spaltenliste angegeben ist, gilt die Berechtigung für alle Spalten in der Tabelle, einschließlich der später hinzugefügten Spalten. Für eine Ansicht ist keine Spaltenliste zulässig.

  • Spanner unterstützt sowohl Ansichten mit Aufruferrechten als auch Ansichten mit Definierrechten. Weitere Informationen finden Sie unter Ansichten – Übersicht.

    Wenn Sie eine Ansicht mit Aufruferberechtigungen erstellen, benötigt die Datenbankrolle oder der Nutzer zum Abfragen der Ansicht die Berechtigung SELECT für die Ansicht sowie die Berechtigung SELECT für die zugrunde liegenden Objekte, auf die in der Ansicht verwiesen wird. Angenommen, die Ansicht SingerNames wird für die Tabelle Singers erstellt.

    CREATE VIEW SingerNames SQL SECURITY INVOKER AS
    SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
    

    Angenommen, die Datenbankrolle myRole führt die Abfrage SELECT * FROM SingerNames aus. Die Rolle muss die Berechtigung SELECT für die Ansicht und die Berechtigung SELECT für die drei referenzierten Spalten oder für die gesamte Tabelle Singers haben.

    Wenn Sie eine Ansicht mit den Rechten des Definierers erstellen, benötigt die Datenbankrolle oder der Nutzer zum Abfragen der Ansicht nur die Berechtigung SELECT für die Ansicht. Angenommen, die Ansicht AlbumsBudget wird für die Tabelle Albums erstellt.

    CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS
    SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
    

    Angenommen, die Datenbankrolle Analyst führt die Abfrage SELECT * FROM AlbumsBudget aus. Für die Rolle ist nur die Berechtigung SELECT für die Ansicht erforderlich. Dafür ist nicht die Berechtigung SELECT für die drei referenzierten Spalten oder für die Tabelle Albums erforderlich.

  • Nachdem der FGAC-Nutzer SELECT für eine Teilmenge von Spalten einer Tabelle gewährt hat, kann er SELECT * für diese Tabelle nicht mehr verwenden. In Abfragen für diese Tabelle müssen alle Spalten angegeben werden, die enthalten sein sollen.

  • Wenn SELECT für eine generierte Spalte gewährt wird, wird SELECT nicht für die zugrunde liegenden Basisspalten gewährt.

  • Bei verschachtelten Tabellen wird SELECT, das für die übergeordnete Tabelle gewährt wurde, nicht auf die untergeordnete Tabelle übertragen.

  • Wenn Sie SELECT für einen Änderungsstream gewähren, müssen Sie auch EXECUTE für die Tabellenwertfunktion des Änderungsstreams gewähren. Weitere Informationen finden Sie unter EXECUTE.

  • Wenn SELECT mit einer Aggregatfunktion für bestimmte Spalten verwendet wird, z. B. SUM(col_a), muss die Rolle das SELECT-Attribut für diese Spalten haben. Wenn in der Aggregatfunktion keine Spalten angegeben sind, z. B. COUNT(*), muss die Rolle das Berechtigung SELECT für mindestens eine Spalte in der Tabelle haben.

  • Wenn Sie SELECT mit einer Sequenz verwenden, können Sie nur Sequenzen aufrufen, für die Sie die entsprechenden Berechtigungen haben.

Beispiele für die Verwendung von GRANT SELECT

GoogleSQL

GRANT SELECT ON TABLE employees TO ROLE hr_director;

GRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr;

GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager;

GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep;

GRANT SELECT ON VIEW orders_view TO ROLE hr_manager;

GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst;

GRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;

PostgreSQL

GRANT SELECT ON TABLE employees TO hr_director;

GRANT SELECT ON TABLE customers, orders, items TO account_mgr;

GRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager;

GRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep;

GRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view

GRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst;

GRANT SELECT ON SEQUENCE sequence_name TO hr_package;

INSERT

Mit dieser Berechtigung kann die Rolle Zeilen in die angegebenen Tabellen einfügen. Wenn eine Spaltenliste angegeben ist, gilt die Berechtigung nur für diese Spalten. Wenn keine Spaltenliste angegeben ist, gilt die Berechtigung für alle Spalten in der Tabelle.

  • Wenn Spaltennamen angegeben werden, erhält jede nicht enthaltene Spalte beim Einfügen ihren Standardwert.

  • INSERT kann für generierte Spalten nicht gewährt werden.

Beispiele für die Verwendung von GRANT INSERT

GoogleSQL

GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager;

GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;

PostgreSQL

GRANT INSERT ON TABLE employees, contractors TO hr_manager;

GRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;

UPDATE

Ermöglicht der Rolle, Zeilen in den angegebenen Tabellen zu aktualisieren. Updates können auf eine Teilmenge von Tabellenspalten beschränkt werden. Wenn Sie diese Option mit Sequenzen verwenden, kann die Rolle die Funktion get-next-sequence-value für die Sequenz aufrufen.

Zusätzlich zur Berechtigung UPDATE muss die Rolle die Berechtigung SELECT für alle abgefragten Spalten haben. Zu den abgefragten Spalten gehören auch Spalten in der WHERE-Klausel.

UPDATE kann für generierte Spalten nicht gewährt werden.

Beispiele für die Verwendung von GRANT UPDATE

GoogleSQL

GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager;

GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;

PostgreSQL

GRANT UPDATE ON TABLE employees, contractors TO hr_manager;

GRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;

DELETE

Ermöglicht der Rolle, Zeilen aus den angegebenen Tabellen zu löschen.

  • DELETE kann nicht auf Spaltenebene gewährt werden.

  • Für alle Spalten, die in den WHERE-Klauseln der Abfrage enthalten sein können, ist außerdem die Rolle SELECT erforderlich.

  • Für verschränkte Tabellen in Datenbanken mit GoogleSQL-Dialekt ist die Berechtigung DELETE nur für die übergeordnete Tabelle erforderlich. Wenn in einer untergeordneten Tabelle ON DELETE CASCADE angegeben ist, werden Zeilen aus der untergeordneten Tabelle auch ohne die Berechtigung DELETE für die untergeordnete Tabelle gelöscht.

Beispiel für die Verwendung von GRANT DELETE

GoogleSQL

GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;

PostgreSQL

GRANT DELETE ON TABLE employees, contractors TO hr_admin;

EXECUTE

Wenn Sie SELECT für einen Änderungsstream gewähren, müssen Sie auch EXECUTE für die Lesefunktion des Änderungsstreams gewähren. Weitere Informationen finden Sie unter Funktionen zum Lesen von Änderungsstreams und Abfragesyntax.

Wenn Sie diese Berechtigung mit Modellen verwenden, kann die Rolle das Modell in Funktionen für maschinelles Lernen verwenden.

Beispiel für die Verwendung von GRANT EXECUTE

Das folgende Beispiel zeigt, wie Sie EXECUTE für die Lesefunktion für den Änderungsstream mit dem Namen my_change_stream gewähren.

GoogleSQL

GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;

PostgreSQL

GRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;

Nutzung

Wenn Sie USAGE für ein benanntes Schema gewähren, werden Berechtigungen für den Zugriff auf Objekte im benannten Schema bereitgestellt. Die Berechtigung USAGE wird standardmäßig für das Standardschema erteilt.

Nächste Schritte