Présentation du contrôle ultraprécis des accès

Le contrôle précis des accès Spanner combine les avantages d'Identity and Access Management (IAM) et du contrôle des accès basé sur les rôles SQL. Le contrôle précis des accès vous permet de définir des rôles de base de données, d'accorder des droits d'accès à ces rôles et de créer des stratégies IAM pour accorder des autorisations sur les rôles de base de données aux comptes principaux IAM. Cette page explique comment utiliser le contrôle des accès précis avec Spanner pour les bases de données utilisant le dialecte GoogleSQL et celles utilisant le dialecte PostgreSQL.

En tant qu'administrateur, vous devez activer le contrôle précis des accès pour chaque principal IAM. Les comptes principaux pour lesquels le contrôle précis des accès est activé ("utilisateurs du contrôle précis des accès") doivent assumer un rôle de base de données pour accéder aux ressources Spanner.

L'accès aux ressources pour les utilisateurs qui n'utilisent pas le contrôle des accès ultraprécis est régi par les rôles IAM au niveau de la base de données. Le contrôle des accès précis est entièrement compatible et peut coexister avec le contrôle des accès IAM existant au niveau de la base de données. Vous pouvez l'utiliser pour accéder à des objets de base de données individuels. Pour contrôler l'accès à l'ensemble de la base de données, utilisez les rôles IAM.

Le contrôle des accès ultraprécis vous permet de contrôler l'accès aux tables, aux colonnes, aux vues et aux flux de modifications.

Pour gérer le contrôle des accès précis, vous utilisez les instructions LDD suivantes :

  • Instructions CREATE et DROP pour créer et supprimer des rôles de base de données. Les rôles de base de données sont des ensembles de droits. Vous pouvez créer jusqu'à 100 rôles pour une base de données.
  • Instructions GRANT et REVOKE pour accorder et révoquer des droits aux rôles de base de données. Les droits d'accès incluent SELECT, INSERT, UPDATE, DELETE et EXECUTE. Les noms des droits d'accès correspondent aux instructions SQL du même nom. Par exemple, un rôle disposant du privilège INSERT peut exécuter l'instruction SQL INSERT sur les tables spécifiées dans l'instruction GRANT.

    Les instructions LDD suivantes accordent SELECT sur la table employees au rôle de base de données hr_rep.

    GoogleSQL

    CREATE ROLE hr_rep;
    GRANT SELECT ON TABLE employees TO ROLE hr_rep;
    

    PostgreSQL

    CREATE ROLE hr_rep;
    GRANT SELECT ON TABLE employees TO hr_rep;
    

    Pour en savoir plus sur les droits d'accès, consultez Référence des droits d'accès pour le contrôle des accès ultraprécis.

  • Déclarations GRANT pour attribuer des rôles à d'autres rôles afin de créer des hiérarchies de rôles, avec héritage des droits.

Cas d'utilisation

Voici des exemples de cas d'utilisation du contrôle précis des accès :

  • Un système d'information RH qui comporte des rôles pour l'analyste des rémunérations des commerciaux, la direction des ventes et l'analyste RH, chacun avec des niveaux d'accès différents aux données. Par exemple, les analystes de la rémunération et la direction des ventes ne doivent pas avoir accès aux numéros de sécurité sociale.
  • Une application de covoiturage avec différents comptes de service et privilèges pour les passagers et les conducteurs.
  • Un grand livre qui autorise les opérations SELECT et INSERT, mais pas les opérations UPDATE et DELETE.

Ressources Spanner et leurs droits d'accès

Vous trouverez ci-dessous la liste des ressources Spanner et des privilèges de contrôle des accès précis des accès que vous pouvez leur accorder.

Schémas
 Vous pouvez accorder le droit USAGE sur les schémas à des rôles de base de données spécifiques. Pour un schéma non défini par défaut, les rôles de base de données doivent disposer du droit USAGE pour accéder aux objets de base de données. La vérification des privilèges se présente comme suit :

Avez-vous USAGE dans le schéma ?

Non : refusez l'accès.

Oui : disposez-vous également des droits appropriés sur la table ?

Non : refusez l'accès.

Oui : vous pouvez accéder à la table.

Tables
Vous pouvez accorder les droits SELECT, INSERT, UPDATE et DELETE sur les tables aux rôles de base de données. Pour les tables entrelacées, un privilège accordé sur la table parente ne se propage pas à la table enfant.
Colonnes
Vous pouvez accorder les autorisations SELECT, INSERT et UPDATE sur un sous-ensemble de colonnes d'une table. Le privilège n'est alors valide que pour ces colonnes. DELETE n'est pas autorisé au niveau des colonnes.
Vues
 Vous pouvez accorder le droit d'accès SELECT à une vue. Seule la valeur SELECT est acceptée pour les vues. Spanner est compatible avec les vues avec droits de l'invocateur et les vues avec droits du définisseur. Si vous créez une vue avec les droits de l'appelant, le rôle ou l'utilisateur de la base de données doit disposer du droit SELECT sur la vue et du droit SELECT sur les objets sous-jacents référencés dans la vue pour pouvoir l'interroger. Si vous créez une vue avec les droits du définisseur, le rôle ou l'utilisateur de la base de données n'a besoin que du droit SELECT sur la vue pour l'interroger. Pour en savoir plus, consultez Présentation des vues.
Modifier les flux
Vous pouvez accorder SELECT sur les flux de modifications.
Vous devez également accorder l'autorisation EXECUTE sur la fonction de lecture associée à un flux de modifications. Pour en savoir plus, consultez Contrôle des accès précis pour les flux de modifications.
Séquences
Vous pouvez accorder SELECT et UPDATE sur les séquences. Pour en savoir plus, consultez Contrôle des accès précis pour les séquences.
Modèles
Vous pouvez accorder EXECUTE sur les modèles. Pour en savoir plus, consultez Contrôle des accès précis pour les modèles.

Rôles du système de contrôle précis des accès

Le contrôle des accès ultraprécis propose des rôles système prédéfinis pour chaque base de données. Comme les rôles de base de données définis par l'utilisateur, les rôles système peuvent contrôler l'accès aux ressources Spanner.

Par exemple, un utilisateur ayant contrôle des accès précis doit disposer du rôle système spanner_sys_reader pour accéder à Key Visualizer et du rôle système spanner_info_reader pour pouvoir afficher les résultats non filtrés lorsqu'il interroge les tables INFORMATION_SCHEMA.

Pour en savoir plus, consultez Rôles système pour le contrôle des accès ultraprécis.

Hiérarchies et héritage des rôles de base de données

Vous pouvez créer des hiérarchies de rôles de base de données, dans lesquelles les rôles enfants héritent des droits des rôles parents. Les rôles enfants sont appelés membres du rôle parent.

Par exemple, prenons les instructions GRANT suivantes :

GoogleSQL

GRANT SELECT ON TABLE employees TO ROLE pii_access;
GRANT ROLE pii_access TO ROLE hr_manager, hr_director;

PostgreSQL

GRANT SELECT ON TABLE employees TO pii_access;
GRANT pii_access TO hr_manager, hr_director;

hr_manager et hr_director sont membres du rôle pii_access et héritent du droit SELECT sur la table employees.

Héritage des droits d'accès

hr_manager et hr_director peuvent également avoir des membres, qui hériteraient du droit SELECT sur employees.

Il n'y a pas de limite à la profondeur des hiérarchies de rôles, mais les performances des requêtes peuvent se dégrader avec des structures de hiérarchie de rôles profondes et larges.

Sauvegarde et restauration

Les sauvegardes Spanner incluent les définitions des rôles de base de données. Lorsqu'une base de données est restaurée à partir d'une sauvegarde, les rôles de base de données sont recréés avec les droits qui leur ont été accordés. Toutefois, les stratégies IAM ne font pas partie des sauvegardes de bases de données. Vous devez donc réattribuer l'accès aux rôles de base de données aux comptes principaux dans la base de données restaurée.

Présentation de la configuration du contrôle précis des accès

Voici les étapes générales à suivre pour commencer à sécuriser les données avec un contrôle d'accès précis. Pour en savoir plus, consultez Configurer le contrôle des accès ultraprécis.

Pour effectuer ces tâches, vous devez disposer des rôles IAM roles/spanner.admin ou roles/spanner.databaseAdmin.

  1. Créez des rôles de base de données et accordez des droits à ces rôles.
  2. Facultatif : Créez des hiérarchies de rôles avec héritage en attribuant des rôles à d'autres rôles.
  3. Procédez comme suit pour chaque compte principal qui doit être un utilisateur du contrôle d'accès précis :
    1. Activez le contrôle des accès précis pour le principal. Le compte principal se voit alors automatiquement attribuer le rôle de base de données public, qui ne dispose d'aucun privilège par défaut. Cette opération est effectuée une seule fois pour chaque principal.
    2. Accordez des autorisations IAM sur un ou plusieurs rôles de base de données au compte principal.
    3. Une fois que le compte principal a reçu tous les rôles de base de données requis, s'il dispose de rôles IAM au niveau de la base de données, envisagez de révoquer ces rôles afin que le contrôle des accès du compte principal ne soit géré que par une seule méthode.

Limites

  • Les opérations d'exportation n'exportent pas les rôles et privilèges de la base de données, et les opérations d'importation ne peuvent pas les importer. Vous devez configurer manuellement les rôles et les droits d'accès une fois l'importation terminée.
  • L'onglet Données de la page TABLE de la console Google Cloud n'est pas disponible pour les utilisateurs du contrôle des accès précis.

Étapes suivantes