Auf dieser Seite werden die Berechtigungen beschrieben, die Sie einer Datenbankrolle für die detaillierte Zugriffssteuerung gewähren können. Diese Informationen gelten sowohl für Datenbanken im GoogleSQL-Dialekt als auch für Datenbanken im PostgreSQL-Dialekt.
Informationen zu Datenbankrollen und zur detaillierten Zugriffssteuerung finden Sie unter Detaillierte Zugriffssteuerung.
In der folgenden Tabelle sind die Berechtigungen für die detaillierte 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 | ✓ | |||||
| Änderungsstream | ✓ | |||||
| Lesefunktion für Änderungsstreams | ✓ | |||||
| Sequenz | ✓ | ✓ | ||||
| Modell | ✓ |
In den folgenden Abschnitten finden Sie 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 in der Tabelle, einschließlich der später hinzugefügten Spalten. Eine Spaltenliste ist für eine Ansicht nicht zulässig.
Spanner unterstützt sowohl Ansichten mit Aufruferrechten als auch Ansichten mit Erstellerrechten. Weitere Informationen finden Sie unter Ansichten – Übersicht.
Wenn Sie eine Ansicht mit den Berechtigungen des Aufrufers erstellen, benötigt die Datenbankrolle oder der Nutzer zum Abfragen der Ansicht die Berechtigung
SELECTfür die Ansicht und die BerechtigungSELECTfür die zugrunde liegenden Objekte, auf die in der Ansicht verwiesen wird. Angenommen, die AnsichtSingerNameswird für die TabelleSingerserstellt.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;Angenommen, die Datenbankrolle
myRoleführt die AbfrageSELECT * FROM SingerNamesaus. Die Rolle muss die BerechtigungSELECTfür die Ansicht und die BerechtigungSELECTfür die drei referenzierten Spalten oder für die gesamte TabelleSingershaben.Wenn Sie eine Ansicht mit den Rechten des Erstellers erstellen, benötigt die Datenbankrolle oder der Nutzer nur die Berechtigung
SELECTfür die Ansicht, um sie abzufragen. Angenommen, die AnsichtAlbumsBudgetwird für die TabelleAlbumserstellt.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;Angenommen, die Datenbankrolle
Analystführt die AbfrageSELECT * FROM AlbumsBudgetaus. Die Rolle benötigt nur die BerechtigungSELECTfür die Ansicht. Die BerechtigungSELECTfür die drei referenzierten Spalten oder für die TabelleAlbumsist nicht erforderlich.Nachdem Sie
SELECTfür eine Teilmenge von Spalten einer Tabelle gewährt haben, kann der Nutzer mit detaillierter ZugriffssteuerungSELECT *für diese Tabelle nicht mehr verwenden. In Abfragen für diese Tabelle müssen alle einzuschließenden Spalten benannt werden.Wenn
SELECTfür eine generierte Spalte gewährt wird, wirdSELECTnicht für die zugrunde liegenden Basisspalten gewährt.Bei verschachtelten Tabellen wird die Berechtigung
SELECT, die für die übergeordnete Tabelle gewährt wurde, nicht an die untergeordnete Tabelle weitergegeben.Wenn Sie
SELECTfür einen Änderungsstream gewähren, müssen Sie auchEXECUTEfür die Tabellenwertfunktion für den Änderungsstream gewähren. Weitere Informationen finden Sie unter EXECUTE.Wenn
SELECTmit einer Aggregatfunktion für bestimmte Spalten verwendet wird, z. B.SUM(col_a), muss die Rolle die BerechtigungSELECTfür diese Spalten haben. Wenn in der Aggregatfunktion keine Spalten angegeben sind, z. B.COUNT(*), muss die Rolle die BerechtigungSELECTfür mindestens eine Spalte in der Tabelle haben.Wenn Sie
SELECTmit 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
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 in der Tabelle.
Wenn Spaltennamen angegeben sind, erhält jede nicht enthaltene Spalte beim Einfügen ihren Standardwert.
INSERTkann nicht für generierte Spalten 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. Aktualisierungen können auf eine Teilmenge von Tabellenspalten beschränkt werden. Wenn Sie diese Berechtigung mit Sequenzen verwenden, kann die Rolle die Funktion get-next-sequence-value für die Sequenz aufrufen.
Zusätzlich zur Berechtigung UPDATE benötigt die Rolle die Berechtigung SELECT für alle abgefragten Spalten. Abgefragte Spalten enthalten Spalten in der WHERE-Klausel.
UPDATE kann nicht für generierte Spalten 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.
DELETEkann nicht auf Spaltenebene gewährt werden.Die Rolle benötigt außerdem
SELECTfür alle Spalten, die in denWHERE-Klauseln der Abfrage enthalten sein könnten.Für verschachtelte Tabellen in GoogleSQL-Dialekt-Datenbanken ist die Berechtigung
DELETEnur für die übergeordnete Tabelle erforderlich. Wenn in einer untergeordneten TabelleON DELETE CASCADEangegeben ist, werden Zeilen aus der untergeordneten Tabelle auch ohne die BerechtigungDELETEfü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 Lesefunktionen und Abfragesyntax für Änderungsstreams.
Wenn Sie diese Rolle mit Modellen verwenden, kann sie das Modell in Funktionen für maschinelles Lernen verwenden.
Beispiel für die Verwendung von GRANT EXECUTE
Im folgenden Beispiel wird gezeigt, 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 einem benannten Schema USAGE gewähren, werden Berechtigungen für den Zugriff auf Objekte im benannten Schema gewährt. Die Berechtigung USAGE wird standardmäßig dem Standardschema gewährt.
Nächste Schritte
- Detaillierte Zugriffssteuerung konfigurieren
- Detaillierte Zugriffssteuerung – Übersicht
- GRANT- und REVOKE-Anweisungen (GoogleSQL-Dialekt-Datenbanken)
- GRANT- und REVOKE-Anweisungen (Datenbanken im PostgreSQL-Dialekt)