Cette page décrit les droits que vous pouvez accorder à un rôle de base de données pour un contrôle des accès précis.
Pour en savoir plus sur les rôles de base de données et le contrôle précis des accès, consultez la page À propos du contrôle ultraprécis des accès.
Le tableau suivant présente les droits de contrôle des accès ultraprécis et les objets de base de données sur lesquels ils peuvent être accordés.
SELECT | INSERT | METTRE À JOUR | SUPPRIMER | EXECUTE | UTILISATION | |
---|---|---|---|---|---|---|
Schéma | ✓ | |||||
Table | ✓ | ✓ | ✓ | ✓ | ||
Colonne | ✓ | ✓ | ✓ | ✓ | ||
View | ✓ | |||||
Flux de modifications | ✓ | |||||
Fonction de lecture du flux de modifications | ✓ | |||||
Séquence | ✓ | ✓ | ||||
Modèle | ✓ |
Les sections suivantes fournissent des informations 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 pour ces colonnes. Si aucune liste de colonnes n'est spécifiée, le droit est valide sur toutes les colonnes de la table, y compris celles ajoutées par la suite. Les listes de colonnes ne sont pas autorisées pour une vue.
Spanner accepte à la fois les vues des droits du demandeur et celles des droits du définissez. Pour en savoir plus, consultez À propos des vues.
Si vous créez une vue avec les droits du demandeur, pour l'interroger, le rôle de base de données ou l'utilisateur doit disposer du droit
SELECT
sur la vue, ainsi que du droitSELECT
sur les objets sous-jacents référencés dans celle-ci. Par exemple, supposons que la vueSingerNames
soit 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
myRole
exécute la requêteSELECT * FROM SingerNames
. Le rôle doit disposer du droitSELECT
sur la vue et du droitSELECT
sur les trois colonnes référencées ou sur l'ensemble de la tableSingers
.Si vous créez une vue avec des droits de définition, pour interroger la vue, le rôle de base de données ou l'utilisateur n'a besoin que du droit
SELECT
sur la vue. Par exemple, supposons que la vueAlbumsBudget
soit 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
Analyst
exécute la requêteSELECT * FROM AlbumsBudget
. Le rôle ne nécessite que le droitSELECT
sur la vue. Le droitSELECT
n'est pas nécessaire sur les trois colonnes référencées ni sur la tableAlbums
.Après avoir accordé l'autorisation
SELECT
sur un sous-ensemble de colonnes d'une table, l'utilisateur FGAC ne peut plus utiliserSELECT *
sur cette table. Les requêtes sur cette table doivent nommer toutes les colonnes à inclure.La fonction
SELECT
accordée sur une colonne générée n'accorde pas l'autorisationSELECT
sur les colonnes de base sous-jacentes.Pour les tables entrelacées, l'accord
SELECT
accordé sur la table parente ne se propage pas à la table enfant.Lorsque vous accordez l'autorisation
SELECT
sur un flux de modifications, vous devez également accorder l'autorisationEXECUTE
sur la fonction de valeur de table pour le flux de modifications. Pour en savoir plus, consultez EXECUTE.Lorsque
SELECT
est utilisé avec une fonction d'agrégation sur des colonnes spécifiques, par exempleSUM(col_a)
, le rôle doit disposer du droitSELECT
sur ces colonnes. Si la fonction d'agrégation ne spécifie aucune colonne, par exempleCOUNT(*)
, le rôle doit disposer du droitSELECT
sur au moins une colonne de la table.Lorsque vous utilisez
SELECT
avec une séquence, vous ne pouvez afficher que les séquences que vous êtes autorisé à afficher.
Examples
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, le droit 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.
Impossible d'accorder
INSERT
sur les colonnes générées.
Examples
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 les lignes dans les tables spécifiées. Les mises à jour peuvent être limitées à un sous-ensemble de colonnes de table. Lorsque vous l'utilisez avec des séquences, le rôle peut appeler la fonction get-next-sequence-value
sur la séquence.
En plus du droit UPDATE
, le rôle nécessite le droit SELECT
sur toutes les colonnes de clé et toutes les colonnes de requête. Les colonnes interrogées incluent des colonnes dans la clause WHERE
, ainsi que des colonnes utilisées pour calculer les nouvelles valeurs des colonnes mises à jour et des colonnes générées.
Impossible d'accorder UPDATE
sur les colonnes générées.
Examples
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.
Impossible d'accorder l'autorisation
DELETE
au niveau de la colonne.Le rôle a également besoin de
SELECT
sur toutes les colonnes de clé et de toutes les colonnes pouvant être incluses dans les clausesWHERE
de la requête.Pour les tables entrelacées dans des bases de données de dialecte GoogleSQL, le privilège
DELETE
n'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 droitDELETE
sur la table enfant.
Exemple
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 l'autorisation SELECT
sur un flux de modifications, vous devez également accorder l'autorisation EXECUTE
sur la fonction de lecture du flux de modifications. Pour en savoir plus, consultez la section Modifier les fonctions de lecture des flux et la syntaxe des requêtes.
Lorsque vous l'utilisez avec des modèles, le rôle peut exploiter ces modèles dans des fonctions de machine learning.
Exemple
L'exemple suivant montre comment accorder l'autorisation 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 l'autorisation USAGE
à un schéma nommé, vous obtenez des droits pour accéder aux objets contenus dans le schéma nommé. Le droit USAGE
est accordé par défaut au schéma par défaut.
Étapes suivantes
Pour en savoir plus, consultez cette page :
- Configurer un contrôle des accès précis
- À propos du contrôle ultraprécis des accès
- Instructions GRANT et REVOKE (bases de données de dialecte GoogleSQL)
- Instructions GRANT et REVOKE (bases de données de dialecte PostgreSQL)