Berechtigungen für die detaillierte Zugriffssteuerung
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
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 mit GoogleSQL- als auch für Datenbanken mit PostgreSQL-Dialekt.
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.
Die folgenden Abschnitte enthalten 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 das Berechtigung nur für diese Spalten. Wenn keine Spaltenliste angegeben ist, gilt das Berechtigung für alle Spalten in der Tabelle, einschließlich derer, die später hinzugefügt werden. Für eine Ansicht ist keine Spaltenliste zulässig.
Spanner unterstützt sowohl die Sicht auf die Rechte des Aufrufers als auch die Sicht auf die Rechte des Definierers. Weitere Informationen finden Sie unter Übersicht über 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.
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 Erstellers erstellen, benötigt die Datenbankrolle oder der Nutzer nur die Berechtigung SELECT für die Ansicht, um sie abzufragen. Angenommen, die Ansicht AlbumsBudget wird in der Tabelle Albums erstellt.
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. Die Berechtigung SELECT ist für die drei referenzierten Spalten oder die Tabelle Albums nicht erforderlich.
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 Spalten enthalten, die eingeschlossen werden sollen.
Wenn SELECT für eine generierte Spalte gewährt wird, wird dadurch keine SELECT für die zugrunde liegenden Basisspalten gewährt.
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 die Tabellenwertfunktion für den Änderungsstream gewähren. Weitere Informationen finden Sie unter EXECUTE.
Wenn SELECT mit einer Aggregationsfunktion für bestimmte Spalten verwendet wird, z. B. SUM(col_a), muss die Rolle das SELECT-Berechtigung 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, können Sie sich nur Sequenzen ansehen, für die Sie Berechtigungen haben.
Ermöglicht es 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 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.
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 diese Funktion 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 umfassen Spalten in der WHERE-Klausel.
UPDATE kann für generierte Spalten nicht gewährt werden.
Ermöglicht der Rolle, Zeilen aus den angegebenen Tabellen zu löschen.
DELETE kann nicht auf Spaltenebene gewährt werden.
Außerdem benötigt die Rolle SELECT für alle Spalten, die in den WHERE-Klauseln der Abfrage enthalten sein könnten.
Für verschränkte Tabellen in Datenbanken mit GoogleSQL-Dialekt ist das DELETE-Berechtigung 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.
Wenn Sie SELECT für einen Änderungsstream gewähren, müssen Sie auch EXECUTE für die Lesefunktion für den Änderungsstream gewähren. Weitere Informationen finden Sie unter Lesefunktionen und Abfragesyntax für Änderungsstreams.
Wenn Sie USAGE einem benannten Schema gewähren, erhalten Sie Berechtigungen für den Zugriff auf Objekte, die im benannten Schema enthalten sind. Die Berechtigung USAGE wird standardmäßig dem Standardschema gewährt.
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-08-17 (UTC)."],[],[],null,["# Fine-grained access control privileges\n\nThis page describes the privileges that you can grant to a database role for\nfine-grained access control. This information applies to both GoogleSQL-dialect databases and PostgreSQL-dialect databases.\n\nTo learn about database roles and fine-grained access control, see\n[Fine-grained access control overview](/spanner/docs/fgac-about).\n\nThe following table shows the fine-grained access control privileges and the database objects\nthat they can be granted on.\n\nThe following sections provide details about each privilege.\n\n`SELECT`\n--------\n\nAllows the role to read or query from a table, view, change stream, sequence, or\nmodel.\n\n- If a column list is specified for a table, the privilege is valid on only\n those columns. If no column list is specified, then the privilege is valid\n on all columns in the table, including columns added afterward. A column\n list isn't allowed for a view.\n\n- Spanner supports both invoker's rights views and definer's\n rights views. For more information, see [Views overview](/spanner/docs/views).\n\n If you create a view with invoker's rights, to query the view, the database\n role or user needs the `SELECT` privilege on the view, and also the `SELECT`\n privilege on the underlying objects referenced in the view. For example,\n suppose the view `SingerNames` is created on the `Singers` table. \n\n CREATE VIEW SingerNames SQL SECURITY INVOKER AS\n SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;\n\n Suppose that the database role `myRole` performs the query `SELECT * FROM\n SingerNames`. The role must have `SELECT` privilege on the view and must\n have `SELECT` privilege on the three referenced columns or on the entire\n `Singers` table.\n\n If you create a view with definer's rights, to query the view, the database\n role or user only needs the `SELECT` privilege on the view. For example,\n suppose the view `AlbumsBudget` is created on the `Albums` table. \n\n CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS\n SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;\n\n Suppose that the database role `Analyst` performs the query `SELECT * FROM\n AlbumsBudget`. The role only needs `SELECT` privilege on the view. It\n doesn't need the `SELECT` privilege on the three referenced columns or on\n the `Albums` table.\n- After granting `SELECT` on a subset of columns for a table, the FGAC user\n can no longer use `SELECT *` on that table. Queries on that table must name\n all columns to be included.\n\n- `SELECT` granted on a generated column doesn't grant `SELECT` on the\n underlying base columns.\n\n- For interleaved tables, `SELECT` granted on the parent table doesn't\n propagate to the child table.\n\n- When you grant `SELECT` on a change stream, you must also grant `EXECUTE` on\n the table-valued function for the change stream. For more information, see\n [EXECUTE](#execute-privilege).\n\n- When `SELECT` is used with an aggregate function on specific columns, for\n example `SUM(col_a)`, the role must have the `SELECT` privilege on those\n columns. If the aggregate function doesn't specify any columns, for example\n `COUNT(*)`, the role must have the `SELECT` privilege on at least one column\n in the table.\n\n- When you use `SELECT` with a sequence, you can only view sequences that you\n have privileges to view.\n\n#### Examples for using `GRANT SELECT`\n\n### GoogleSQL\n\n```googlesql\nGRANT SELECT ON TABLE employees TO ROLE hr_director;\n\nGRANT SELECT ON TABLE customers, orders, items TO ROLE account_mgr;\n\nGRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO ROLE hr_manager;\n\nGRANT SELECT(name, address, phone) ON TABLE employees, contractors TO ROLE hr_rep;\n\nGRANT SELECT ON VIEW orders_view TO ROLE hr_manager;\n\nGRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst;\n\nGRANT SELECT ON SEQUENCE sequence_name TO ROLE role_name;\n```\n\n### PostgreSQL\n\n```postgresql\nGRANT SELECT ON TABLE employees TO hr_director;\n\nGRANT SELECT ON TABLE customers, orders, items TO account_mgr;\n\nGRANT SELECT(name, level, cost_center, location, manager) ON TABLE employees TO hr_manager;\n\nGRANT SELECT(name, address, phone) ON TABLE employees, contractors TO hr_rep;\n\nGRANT SELECT ON TABLE orders_view TO hr_manager; // orders_view is an invoker rights view\n\nGRANT SELECT ON CHANGE STREAM orders_change_stream TO hr_analyst;\n\nGRANT SELECT ON SEQUENCE sequence_name TO hr_package;\n```\n\n`INSERT`\n--------\n\nAllows the role to insert rows into the specified tables. If a column list is\nspecified, the permission is valid on only those\ncolumns. If no column list is specified, then the privilege is valid on all\ncolumns in the table.\n\n- If column names are specified, any column not included gets its default\n value upon insert.\n\n- `INSERT` can't be granted on generated columns.\n\n#### Examples for using `GRANT INSERT`\n\n### GoogleSQL\n\n```googlesql\nGRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager;\n\nGRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;\n```\n\n### PostgreSQL\n\n```postgresql\nGRANT INSERT ON TABLE employees, contractors TO hr_manager;\n\nGRANT INSERT(name, address, phone) ON TABLE employees TO hr_rep;\n```\n\n`UPDATE`\n--------\n\nAllows the role to update rows in the specified tables. Updates can be\nrestricted to a subset of table columns. When you use this with sequences, it\nallows the role to call the `get-next-sequence-value` function on the sequence.\n\nIn addition to the `UPDATE` privilege, the role needs the `SELECT` privilege on\nall queried columns. Queried columns include columns in the `WHERE` clause.\n\n`UPDATE` can't be granted on generated columns.\n\n#### Examples for using `GRANT UPDATE`\n\n### GoogleSQL\n\n```googlesql\nGRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager;\n\nGRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;\n```\n\n### PostgreSQL\n\n```postgresql\nGRANT UPDATE ON TABLE employees, contractors TO hr_manager;\n\nGRANT UPDATE(name, address, phone) ON TABLE employees TO hr_rep;\n```\n\n`DELETE`\n--------\n\nAllows the role to delete rows from the specified tables.\n\n- `DELETE` can't be granted at the column level.\n\n- The role also needs `SELECT` on any columns that might be\n included in the query's `WHERE` clauses.\n\n- For interleaved tables in GoogleSQL-dialect databases, the\n `DELETE` privilege is required only on the parent table. If a child table\n specifies `ON DELETE CASCADE`, rows from the child table are deleted even without\n the `DELETE` privilege on the child table.\n\n#### Example for using `GRANT DELETE`\n\n### GoogleSQL\n\n```googlesql\nGRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;\n```\n\n### PostgreSQL\n\n```postgresql\nGRANT DELETE ON TABLE employees, contractors TO hr_admin;\n```\n\n`EXECUTE`\n---------\n\nWhen you grant `SELECT` on a change stream, you must also grant `EXECUTE` on the\nread function for the change stream. For more information, see\n[Change stream read functions and query syntax](/spanner/docs/change-streams/details#change_stream_query_syntax).\n\nWhen you use this with models, it allows the role to use the model in\n[machine learning functions](/spanner/docs/reference/standard-sql/ml-functions).\n\n#### Example for using `GRANT EXECUTE`\n\nThe following example shows how to grant `EXECUTE` on the read function for the\nchange stream named `my_change_stream`. \n\n### GoogleSQL\n\n```googlesql\nGRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;\n```\n\n### PostgreSQL\n\n```postgresql\nGRANT EXECUTE ON FUNCTION spanner.read_json_my_change_stream TO hr_analyst;\n```\n\nUSAGE\n-----\n\nWhen you grant `USAGE` to a named schema, it provides privileges to access\nobjects contained in the named schema. The `USAGE` privilege is granted, by\ndefault, to the default schema.\n\nWhat's next\n-----------\n\n- [Configure fine-grained access control](/spanner/docs/configure-fgac)\n- [Fine-grained access control overview](/spanner/docs/fgac-about)\n- [GRANT and REVOKE statements](/spanner/docs/reference/standard-sql/data-definition-language#grant_and_revoke_statements) (GoogleSQL-dialect databases)\n- [GRANT and REVOKE statements](/spanner/docs/reference/postgresql/data-definition-language#grant_and_revoke_statements) (PostgreSQL-dialect databases)"]]