Auf dieser Seite werden die Berechtigungen beschrieben, die Sie einer Datenbankrolle für eine differenzierte Zugriffssteuerung gewähren können.
Weitere Informationen zu Datenbankrollen und detaillierten Zugriffssteuerungen finden Sie unter Detaillierte Zugriffssteuerung.
Die folgende Tabelle enthält die detaillierten Berechtigungen für die Zugriffssteuerung und die Datenbankobjekte, für die sie gewährt werden können.
SELECT | INSERT | UPDATE | LÖSCHEN | EXECUTE | |
---|---|---|---|---|---|
Tabelle | ✓ | ✓ | ✓ | ✓ | |
Spalte | ✓ | ✓ | ✓ | ||
Ansehen | ✓ | ||||
Änderungsstream | ✓ | ||||
Lesefunktion des Änderungsstreams | ✓ | ||||
Sequenz | ✓ | ✓ | |||
Modell | ✓ |
Die folgenden Abschnitte enthalten Details zu den einzelnen Berechtigungen.
SELECT
Ermöglicht der Rolle, Daten aus einer Tabelle, einer 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 der Tabelle, auch für Spalten, die danach hinzugefügt werden. Eine Spaltenliste ist für eine Ansicht nicht zulässig.
Spanner unterstützt sowohl die Ansichten der Aufrufrechte als auch die Ansichten der Definerrechte. Weitere Informationen zu Ansichten
Wenn Sie eine Ansicht mit den Aufruferrechten erstellen, benötigt die Datenbankrolle oder der Nutzer zum Abfragen die Berechtigung
SELECT
für die Ansicht sowie die BerechtigungSELECT
für die zugrunde liegenden Objekte, auf die in der Ansicht verwiesen wird. Angenommen, die AnsichtSingerNames
wird für die TabelleSingers
erstellt.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
Angenommen, die Datenbankrolle
myRole
führt die AbfrageSELECT * FROM SingerNames
aus. Die Rolle muss die BerechtigungSELECT
für die Ansicht und die BerechtigungSELECT
für die drei referenzierten Spalten oder für die gesamte TabelleSingers
haben.Wenn Sie eine Ansicht mit den Definitionsrechten erstellen, benötigt die Datenbankrolle oder der Nutzer zum Abfragen der Ansicht nur die Berechtigung
SELECT
für die Ansicht. Angenommen, die AnsichtAlbumsBudget
wird für die TabelleAlbums
erstellt.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;
Angenommen, die Datenbankrolle
Analyst
führt die AbfrageSELECT * FROM AlbumsBudget
aus. Die Rolle benötigt nur die BerechtigungSELECT
für die Ansicht. Die BerechtigungSELECT
für die drei referenzierten Spalten oder für die TabelleAlbums
wird nicht benötigt.Nachdem der FGAC-Nutzer für eine Teilmenge von Spalten einer Tabelle
SELECT
gewährt hat, kann erSELECT *
für diese Tabelle nicht mehr verwenden. Abfragen für diese Tabelle müssen alle einzuschließenden Spalten benennen.SELECT
, die für eine generierte Spalte gewährt wurde, gewährtSELECT
nicht für die zugrunde liegenden Basisspalten.Bei verschachtelten Tabellen wird der für die übergeordnete Tabelle gewährte
SELECT
nicht in die untergeordnete Tabelle übernommen.Wenn Sie
SELECT
für einen Änderungsstream zuweisen, müssen Sie auchEXECUTE
für die Tabellenwertfunktion für den Änderungsstream zuweisen. Weitere Informationen finden Sie unter AUSFÜHREN.Wenn
SELECT
mit einer Aggregatfunktion für bestimmte Spalten wieSUM(col_a)
verwendet wird, muss die Rolle für diese Spalten die BerechtigungSELECT
haben. Wenn die Aggregatfunktion keine Spalten angibt, z. B.COUNT(*)
, muss die Rolle die BerechtigungSELECT
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 Berechtigungen zum Ansehen 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 diese Spalten. Wenn keine Spaltenliste angegeben ist, gilt die Berechtigung für alle Spalten der Tabelle.
Wenn Spaltennamen angegeben werden, erhalten alle nicht eingeschlossenen Spalten 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
Ermöglicht der Rolle, Zeilen in den angegebenen Tabellen zu aktualisieren. Aktualisierungen können auf eine Teilmenge von Tabellenspalten beschränkt werden. Wenn Sie dies für Sequenzen verwenden, kann die Rolle die get-next-sequence-value
-Funktion für die Sequenz aufrufen.
Zusätzlich zur Berechtigung UPDATE
benötigt die Rolle die Berechtigung SELECT
für alle Schlüsselspalten und alle abgefragten Spalten. Abgefragte Spalten enthalten Spalten in der WHERE
-Klausel und Spalten, mit denen die neuen Werte aktualisierter und generierter Spalten berechnet werden.
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 Schlüsselspalten und alle Spalten, die inWHERE
-Abfrageklauseln enthalten sein könnten.Bei verschachtelten Tabellen in GoogleSQL-Dialekten ist die Berechtigung
DELETE
nur für die übergeordnete Tabelle erforderlich. Wenn in einer untergeordneten TabelleON DELETE CASCADE
angegeben ist, werden Zeilen aus der untergeordneten Tabelle auch ohne die BerechtigungDELETE
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 die Lesefunktion für den Änderungsstream zuweisen. Weitere Informationen finden Sie unter Lesefunktionen von Streams und Abfragesyntax ändern.
Bei Verwendung mit Modellen kann die Rolle das Modell in Funktionen für maschinelles Lernen verwenden.
Beispiel
Das folgende Beispiel zeigt, wie EXECUTE
für die Lesefunktion für den Änderungsstream mit dem Namen 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;
Nächste Schritte
Weitere Informationen finden Sie unter:
- Detaillierte Zugriffssteuerung konfigurieren
- Detaillierte Zugriffssteuerung
- GRANT- und REVOKE-Anweisungen (GoogleSQL-Dialekt-Datenbanken)
- GRANT- und REVOKE-Anweisungen (PostgreSQL-Datenbanken)