Privilèges du contrôle des accès précis

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 À propos du contrôle ultraprécis des accès

Le tableau suivant présente les droits d'accès précis en 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 UTILISATION
Schéma
Tableau
Colonne
Afficher
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é pour une table, le droit n'est valable que pour colonnes. Si aucune liste de colonnes n'est spécifiée, le droit est valide sur toutes les colonnes de la table, y compris les colonnes ajoutées par la suite. Une liste de colonnes n’est pas autorisé pour une vue.

  • Spanner accepte à la fois les vues des droits du demandeur et les vues des droits d'auteur. Pour en savoir plus, consultez À propos des vues.

    Si vous créez une vue avec les droits du demandeur, pour interroger la vue, la base de données ou l'utilisateur a besoin 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 sur la table Singers.

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

    Si vous créez une vue avec les droits du définissenteur, pour interroger la vue, la base de données ou l'utilisateur n'a besoin que du droit SELECT sur la vue. Par exemple : supposons que la vue AlbumsBudget soit créée sur la table Albums.

    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ête SELECT * FROM AlbumsBudget Le rôle ne nécessite que SELECT droit sur le vue. Il n'a pas besoin du droit SELECT sur les trois colonnes référencées ou sur la table Albums.

  • Après avoir accordé l'autorisation SELECT sur un sous-ensemble de colonnes d'une table, l'utilisateur FGAC peut n'utilisez plus SELECT * sur cette table. Les requêtes sur cette table doivent nommer tous colonnes à inclure.

  • La fonction SELECT accordée sur une colonne générée n'accorde pas l'autorisation SELECT sur la colonne sous-jacente colonnes de base.

  • Pour les tables entrelacées, SELECT accordé sur la table parente ne se propagent à la table enfant.

  • Lorsque vous accordez SELECT sur un flux de modifications, vous devez également accorder EXECUTE 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 exemple 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.

  • Lorsque vous utilisez SELECT avec une séquence, vous ne pouvez afficher que les séquences que vous que vous êtes autorisé à consulter.

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é, l'autorisation n'est valable que pour colonnes. Si aucune liste de colonnes n'est spécifiée, le droit est valide sur toutes les dans le tableau.

  • 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é à un sous-ensemble de colonnes de table. Lorsque vous l'utilisez avec des séquences, 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 le droit SELECT sur toutes les colonnes de clé et toutes les colonnes de requête. Interrogée Les colonnes 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 toutes les colonnes susceptibles d'être incluses dans les clauses WHERE de la requête.

  • Pour les tables entrelacées dans des bases de données de dialecte GoogleSQL, la Le droit DELETE n'est requis que pour la table parente. Si un tableau enfant spécifie ON DELETE CASCADE, les lignes de la table enfant sont supprimées même sans le droit DELETE 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 SELECT sur un flux de modifications, vous devez également accorder EXECUTE sur le de lecture du flux de modifications. Pour en savoir plus, consultez Modifiez les fonctions de lecture des flux et la syntaxe des requêtes.

Lorsque vous l'utilisez avec des modèles, il permet au rôle d'utiliser le modèle 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 d'accès objets contenus dans le schéma nommé. Le droit USAGE est accordé par par défaut au schéma par défaut.

Étape suivante

Pour en savoir plus, consultez les pages suivantes :