Droits d'accès précis

Restez organisé à l'aide des collections Enregistrez et classez les contenus selon vos préférences.

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 droit SELECT sur les objets sous-jacents référencés dans la vue. Par exemple, supposons que la vue SingerNames soit créée dans la table Singers.

    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ête SELECT * FROM SingerNames. Le rôle doit avoir SELECT sur la vue et SELECT sur les trois colonnes référencées ou sur l'ensemble de la table Singers.

  • Après avoir accordé SELECT sur un sous-ensemble de colonnes d'une table, l'utilisateur FGAC ne peut plus utiliser SELECT * 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 pas SELECT 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'autorisation EXECUTE à 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 exemple SUM(col_a), le rôle doit disposer du droit SELECT sur ces colonnes. Si la fonction d'agrégation ne spécifie aucune colonne, par exemple COUNT(*), le rôle doit disposer du droit SELECT 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 droit SELECT sur toutes les colonnes de clé et toutes les colonnes interrogées. Les colonnes interrogées incluent les colonnes de la clause WHERE 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ête WHERE.

  • Pour les tables entrelacées, le droit DELETE n'est requis que sur la table parente. Si une table enfant spécifie ON DELETE CASCADE, les lignes de la table enfant sont supprimées même sans le privilège DELETE 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 :