Cette page décrit les droits que vous pouvez accorder à un rôle de base de données pour un contrôle d'accès précis.
Pour en savoir plus sur les rôles de base de données et le contrôle des accès ultraprécis, consultez la page À propos du contrôle des accès ultraprécis.
Le tableau suivant présente les droits précis du contrôle des accès et les objets de base de données sur lesquels ils peuvent être accordés.
SELECT | INSERT | METTRE À JOUR | SUPPRIMER | EXECUTE | |
---|---|---|---|---|---|
Table | ✓ | ✓ | ✓ | ✓ | |
Colonne | ✓ | ✓ | ✓ | ||
Afficher | ✓ | ||||
Flux de modifications | ✓ | ||||
Modifier la TVF du flux | ✓ |
Les sections suivantes détaillent chaque droit.
SELECT
Rôle permettant de lire ou d'interroger une table, une vue ou un flux de modifications.
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, le droit est valide sur 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.
Étant donné que Cloud Spanner n'est actuellement compatible qu'avec les vues avec droits de demandeur, un rôle de base de données doit disposer du droit
SELECT
sur la vue, ainsi que du droitSELECT
sur les objets sous-jacents référencés dans la vue. Par exemple, supposons que la vueSingerNames
soit créée dans la tableSingers
.CREATE VIEW SingerNames SQL SECURITY INVOKER AS SELECT Singers.SingerId, Singers.FirstName, Singers.LastName FROM Singers;
Supposons également que le rôle de base de données
myRole
effectue la requêteSELECT * FROM SingerNames
. Le rôle doit avoirSELECT
sur la vue etSELECT
sur les trois colonnes référencées ou sur l'ensemble de la tableSingers
.Après avoir accordé
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.SELECT
accordé sur une colonne générée n'accorde pasSELECT
sur les colonnes de base sous-jacentes.Pour les tables entrelacées, l'autorisation
SELECT
accordée 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
à la fonction de valeur de table associée au flux de modifications. Pour en savoir plus, consultez la section EXÉCUTER.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.
Examples
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 ordersSummary TO ROLE hr_manager; GRANT SELECT ON CHANGE STREAM ordersChangeStream TO ROLE hr_analyst;
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 sur 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
GRANT INSERT ON TABLE employees, contractors TO ROLE hr_manager; GRANT INSERT(name, address, phone) ON TABLE employees TO ROLE hr_rep;
UPDATE
Permet au rôle de mettre à jour les lignes des tables spécifiées. Les mises à jour peuvent être limitées à un sous-ensemble de colonnes de la table.
En plus du droit
UPDATE
, le rôle a besoin du droitSELECT
sur toutes les colonnes de clé et toutes les colonnes interrogées. Les colonnes interrogées incluent les colonnes de la clauseWHERE
et les colonnes permettant de calculer les nouvelles valeurs des colonnes mises à jour et générées.Impossible d'accorder
UPDATE
sur les colonnes générées.
Examples
GRANT UPDATE ON TABLE employees, contractors TO ROLE hr_manager; GRANT UPDATE(name, address, phone) ON TABLE employees TO ROLE hr_rep;
DELETE
Permet au rôle de supprimer des lignes des tables spécifiées.
Impossible d'accorder
DELETE
au niveau de la colonne.Le rôle a également besoin de
SELECT
sur toutes les colonnes de clé et toutes les colonnes susceptibles d'être incluses dans les clauses de requêteWHERE
.Pour les tables entrelacées, le droit
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 privilègeDELETE
sur la table enfant.
Exemple
GRANT DELETE ON TABLE employees, contractors TO ROLE hr_admin;
EXECUTE
Lorsque vous accordez SELECT
sur un flux de modifications, vous devez également accorder EXECUTE
sur la fonction de valeur de table (TVF) pour le flux de modifications. Pour en savoir plus sur les TVF, consultez Modifier la syntaxe des requêtes de flux.
Exemple
GRANT EXECUTE ON TABLE FUNCTION READ_my_change_stream TO ROLE hr_analyst;
Informations complémentaires
Pour en savoir plus, consultez les pages suivantes :
- Configurer un contrôle des accès ultraprécis
- À propos du contrôle ultraprécis des accès
- Instructions GRANT et REVOKE