Berechtigungen für die detaillierte Zugriffssteuerung

Auf dieser Seite werden die Berechtigungen beschrieben, die Sie einer Datenbankrolle für eine detaillierte Zugriffssteuerung gewähren können.

Informationen zu Datenbankrollen und detaillierter Zugriffssteuerung finden Sie unter Detaillierte Zugriffssteuerung.

In der folgenden Tabelle sind die Berechtigungen für die differenzierte 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 ändern
Sequenz
Modell

Die folgenden Abschnitte enthalten Details zu den einzelnen Berechtigungen.

SELECT

Ermöglicht der Rolle das Lesen oder Abfragen aus einer Tabelle, einer Ansicht, einem Änderungsstream, einer Sequenz oder einem Modell.

  • Wenn für eine Tabelle eine Spaltenliste angegeben ist, gilt das Berechtigungsobjekt nur für diese Spalten. Wenn keine Spaltenliste angegeben ist, gilt die Berechtigung für alle Spalten in der Tabelle, einschließlich später hinzugefügter Spalten. Eine Spaltenliste ist kein für eine Datenansicht zulässig.

  • Spanner unterstützt sowohl Ansichten der Rechte des Aufrufers als auch Ansichten der Rechte des Definierers. Weitere Informationen finden Sie unter Informationen zu Ansichten.

    Wenn Sie eine Ansicht mit den Rechten des Aufrufers erstellen, benötigt die Datenbankrolle oder der Nutzer zum Abfragen der Ansicht die Berechtigung SELECT für die Ansicht und die Berechtigung SELECT für die zugrunde liegenden Objekte, auf die in der Ansicht verwiesen wird. Angenommen, die Ansicht SingerNames wird in der 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 Singers-Tabelle haben.

    Wenn Sie eine Ansicht mit Definitionsrechten erstellen, wird die Datenbank Rolle oder ein Nutzer benötigt nur die Berechtigung SELECT für die Datenansicht. Angenommen, die Ansicht AlbumsBudget wird in der 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. Für die Rolle ist nur die Berechtigung SELECT für die Ansicht erforderlich. Die Berechtigung SELECT für die drei referenzierten Spalten ist nicht erforderlich oder in der Tabelle Albums.

  • Nachdem SELECT für eine Teilmenge von Spalten für eine Tabelle gewährt wurde, kann der FGAC-Nutzer SELECT * für diese Tabelle nicht mehr verwenden. Abfragen für diese Tabelle müssen alle zu berücksichtigenden Spalten benennen.

  • Die für eine generierte Spalte gewährte SELECT gewährt keinen SELECT für die zugrunde liegende Basisspalten.

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

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

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

  • Wenn Sie SELECT mit einer Sequenz verwenden, sehen Sie nur Sequenzen, Anzeigeberechtigung haben.

Beispiele

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

Ermöglicht der Rolle, Zeilen in die angegebenen Tabellen einzufügen. Wenn eine Spaltenliste angegeben ist, gilt die Berechtigung nur für Spalten. Wenn keine Spaltenliste angegeben ist, gilt das 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

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

Mit dieser Rolle können Zeilen in den angegebenen Tabellen aktualisiert werden. Aktualisierungen können auf eine Teilmenge der Tabellenspalten beschränkt werden. Wenn Sie es mit Sequenzen verwenden, ermöglicht der Rolle, die get-next-sequence-value-Funktion für die Sequenz aufzurufen.

Zusätzlich zur Berechtigung UPDATE benötigt die Rolle die Berechtigung SELECT für alle abgefragten Spalten. Abgefragte Spalten umfassen Spalten in der WHERE-Klausel.

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

Beispiele

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.

  • Die Rolle benötigt außerdem SELECT für alle Spalten, die möglicherweise in den WHERE-Klauseln der Abfrage enthalten.

  • Für verschränkte Tabellen in GoogleSQL-Dialektdatenbanken gibt der Parameter Die Berechtigung DELETE ist nur für die übergeordnete Tabelle erforderlich. Wenn für eine untergeordnete Tabelle ON DELETE CASCADE angegeben ist, werden Zeilen aus der untergeordneten Tabelle auch ohne das DELETE-Berechtigung für die untergeordnete Tabelle gelöscht.

Beispiel

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 zuweisen, müssen Sie auch EXECUTE für das read-Funktion für den Änderungsstream. Weitere Informationen finden Sie unter Lesefunktionen und Abfragesyntax für Änderungsstreams

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

Beispiel

Im folgenden Beispiel wird gezeigt, wie EXECUTE für die Lesefunktion des Änderungsstreams my_change_stream gewährt wird.

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 einem benannten Schema USAGE zuweisen, erhalten Sie damit Zugriffsberechtigungen -Objekte, die im benannten Schema enthalten sind. Die Berechtigung USAGE wird gewährt durch Standardschema auf das Standardschema anwenden.

Nächste Schritte

Weitere Informationen finden Sie unter: