Cette page décrit les droits que vous pouvez accorder à un rôle de base de données pour un contrôle ultraprécis des accès. Ces informations s'appliquent aux bases de données utilisant le dialecte GoogleSQL et à celles utilisant le dialecte PostgreSQL.
Pour en savoir plus sur les rôles de base de données et le contrôle ultraprécis des accès, consultez Présentation du contrôle ultraprécis des accès.
Le tableau suivant présente les droits de contrôle ultraprécis des accès et les objets de base de données auxquels ils peuvent être accordés.
| SELECT | INSERT | UPDATE | SUPPRIMER | EXECUTE | UTILISATION | |
|---|---|---|---|---|---|---|
| Schéma | ✓ | |||||
| Table | ✓ | ✓ | ✓ | ✓ | ||
| Colonne | ✓ | ✓ | ✓ | ✓ | ||
| Afficher | ✓ | |||||
| Flux de modifications | ✓ | |||||
| Fonction de lecture du flux de modifications | ✓ | |||||
| Séquence | ✓ | ✓ | ||||
| Modèle | ✓ |
Les sections suivantes fournissent des détails sur chaque droit.
SELECT
Permet au rôle de lire ou d'interroger une table, une vue, un flux de modifications, une séquence ou un modèle.
Si une liste de colonnes est spécifiée pour une table, le droit n'est valide que sur ces colonnes. Si aucune liste de colonnes n'est spécifiée, l'autorisation est valide pour toutes les colonnes de la table, y compris celles ajoutées ultérieurement. Une liste de colonnes n'est pas autorisée pour une vue.
Spanner est compatible avec les vues de droits de l'appelant et les vues de droits du définisseur. Pour en savoir plus, consultez la présentation des vues.
Si vous créez une vue avec les droits de l'appelant, pour interroger la vue, le rôle ou l'utilisateur de la base de données doit disposer du droit
SELECTsur la vue, ainsi que du droitSELECTsur les objets sous-jacents référencés dans la vue. Par exemple, supposons que la vueSingerNamessoit créée sur la tableSingers.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;Supposons que le rôle de base de données
myRoleexécute la requêteSELECT * FROM SingerNames. Le rôle doit disposer du droitSELECTsur la vue et du droitSELECTsur les trois colonnes référencées ou sur l'ensemble de la tableSingers.Si vous créez une vue avec les droits du créateur, pour interroger la vue, le rôle ou l'utilisateur de la base de données n'a besoin que du droit
SELECTsur la vue. Par exemple, supposons que la vueAlbumsBudgetsoit créée sur la tableAlbums.CREATE VIEW AlbumsBudget SQL SECURITY DEFINER AS SELECT Albums.Id, Albums.AlbumTitle, MarketingBudget FROM Albums;Supposons que le rôle de base de données
Analystexécute la requêteSELECT * FROM AlbumsBudget. Le rôle n'a besoin que du droitSELECTsur la vue. Il n'a pas besoin du droitSELECTsur les trois colonnes référencées ni sur la tableAlbums.Après avoir accordé
SELECTsur un sous-ensemble de colonnes d'une table, l'utilisateur du contrôle ultraprécis des accès ne peut plus utiliserSELECT *sur cette table. Les requêtes sur cette table doivent nommer toutes les colonnes à inclure.L'autorisation
SELECTaccordée sur une colonne générée n'accorde pas l'autorisationSELECTsur les colonnes de base sous-jacentes.Pour les tables entrelacées, l'autorisation
SELECTaccordée sur la table parente ne se propage pas à la table enfant.Lorsque vous accordez l'autorisation
SELECTsur un flux de modifications, vous devez également accorder l'autorisationEXECUTEsur la fonction de valeur de table pour le flux de modifications. Pour en savoir plus, consultez EXECUTE.Lorsque
SELECTest utilisé avec une fonction d'agrégation sur des colonnes spécifiques, par exempleSUM(col_a), le rôle doit disposer du droitSELECTsur ces colonnes. Si la fonction d'agrégation ne spécifie aucune colonne, par exempleCOUNT(*), le rôle doit disposer du droitSELECTsur au moins une colonne de la table.Lorsque vous utilisez
SELECTavec une séquence, vous ne pouvez afficher que les séquences que vous êtes autorisé à afficher.
Exemples d'utilisation de 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
Permet au rôle d'insérer des lignes dans les tables spécifiées. Si une liste de colonnes est spécifiée, l'autorisation n'est valide que pour ces colonnes. Si aucune liste de colonnes n'est spécifiée, l'autorisation est valide sur toutes les colonnes de la table.
Si des noms de colonnes sont spécifiés, toute colonne non incluse obtient sa valeur par défaut lors de l'insertion.
INSERTne peut pas être accordé sur les colonnes générées.
Exemples d'utilisation de 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
Permet au rôle de mettre à jour des lignes dans les tables spécifiées. Les mises à jour peuvent être limitées à un sous-ensemble de colonnes de la table. Lorsque vous l'utilisez avec des séquences, il permet au rôle d'appeler la fonction get-next-sequence-value sur la séquence.
En plus du droit UPDATE, le rôle doit disposer du droit SELECT sur toutes les colonnes interrogées. Les colonnes interrogées incluent les colonnes de la clause WHERE.
UPDATE ne peut pas être accordé sur les colonnes générées.
Exemples d'utilisation de 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
Permet au rôle de supprimer des lignes des tables spécifiées.
DELETEne peut pas être accordé au niveau de la colonne.Le rôle doit également disposer de l'autorisation
SELECTsur toutes les colonnes susceptibles d'être incluses dans les clausesWHEREde la requête.Pour les tables entrelacées dans les bases de données utilisant le dialecte GoogleSQL, le droit
DELETEn'est requis que sur la table parente. Si une table enfant spécifieON DELETE CASCADE, les lignes de la table enfant sont supprimées même sans le droitDELETEsur la table enfant.
Exemple d'utilisation de GRANT DELETE
GoogleSQL
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
PostgreSQL
GRANT DELETE ON TABLE employees, contractors TO hr_admin;
EXECUTE
Lorsque vous accordez SELECT sur un flux de modifications, vous devez également accorder EXECUTE sur la fonction de lecture du flux de modifications. Pour en savoir plus, consultez Fonctions de lecture et syntaxe de requête des flux de modifications.
Lorsque vous l'utilisez avec des modèles, il permet au rôle d'utiliser le modèle dans les fonctions de machine learning.
Exemple d'utilisation de GRANT EXECUTE
L'exemple suivant montre comment accorder EXECUTE sur la fonction de lecture pour le flux de modifications nommé my_change_stream.
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;
UTILISATION
Lorsque vous accordez USAGE à un schéma nommé, cela fournit des droits d'accès aux objets contenus dans le schéma nommé. Par défaut, le droit USAGE est accordé au schéma par défaut.
Étapes suivantes
- Configurer le contrôle ultraprécis des accès
- Présentation du contrôle des accès ultraprécis des accès
- Instructions GRANT et REVOKE (bases de données en dialecte GoogleSQL)
- Instructions GRANT et REVOKE (bases de données utilisant le dialecte PostgreSQL)