Le contrôle des accès précis de Spanner combine les avantages d'Identity and Access Management (IAM) et du contrôle des accès basé sur les rôles SQL. Avec le contrôle précis des accès, vous définissez des rôles de base de données, accordez des privilèges aux rôles et créez des stratégies IAM pour accorder des autorisations sur les rôles de base de données aux principaux IAM. Cette page explique comment utiliser le contrôle d'accès précis avec Spanner pour les bases de données en dialecte GoogleSQL et en dialecte PostgreSQL.
En tant qu'administrateur, vous devez activer le contrôle précis des accès pour les comptes principaux IAM individuels. Les comptes principaux pour lesquels le contrôle des accès précis est activé ("utilisateurs du contrôle des accès précis") doivent assumer un rôle de base de données pour accéder aux ressources Spanner.
L'accès aux ressources des utilisateurs qui ne sont pas des utilisateurs de contrôle des accès pré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 des rôles IAM.
Le contrôle des accès pré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 DDL suivantes:
- Instructions
CREATE
etDROP
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
etREVOKE
pour accorder et révoquer des droits aux rôles de base de données et depuis ceux-ci. Les droits d'accès incluentSELECT
,INSERT
,UPDATE
,DELETE
etEXECUTE
. Les noms de privilèges correspondent aux instructions SQL du même nom. Par exemple, un rôle disposant du privilègeINSERT
peut exécuter l'instruction SQLINSERT
sur les tables spécifiées dans l'instructionGRANT
.Les instructions LDD suivantes accordent
SELECT
sur la tableemployees
au rôle de base de donnéeshr_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, consultez la référence des droits de contrôle des accès ultraprécis.
Instructions
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 de la rémunération des ventes, la gestion des ventes et l'analyste RH, chacun disposant de 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 voir les 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 journal qui autorise les opérations
SELECT
etINSERT
, mais pas les opérationsUPDATE
etDELETE
.
Ressources Spanner et leurs droits
Vous trouverez ci-dessous la liste des ressources Spanner et les privilèges de contrôle 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 autre que par défaut, les rôles de base de données doivent disposer du droitUSAGE
pour accéder aux objets de base de données. La vérification des droits d'accès 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 au tableau.
- Tables
- Vous pouvez accorder les privilèges
SELECT
,INSERT
,UPDATE
etDELETE
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
SELECT
,INSERT
etUPDATE
à 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 de la colonne. - Vues
- Vous pouvez accorder le privilège
SELECT
à une vue. Seule la valeurSELECT
est acceptée pour les vues. Spanner est compatible avec les vues des droits de l'appelant et les vues des droits du définisseur. Si vous créez une vue avec les droits de l'appelant, pour interroger la vue, le rôle de base de données ou l'utilisateur doit disposer du droitSELECT
sur la vue, ainsi que du droitSELECT
sur les objets sous-jacents référencés dans la vue. Si vous créez une vue avec les droits du concepteur, le rôle de base de données ou l'utilisateur n'a besoin que de l'autorisationSELECT
sur la vue pour l'interroger. Pour en savoir plus, consultez la section Présentation des vues. - Modifier les flux
- Vous pouvez accorder
SELECT
sur les flux de modifications. Vous devez également accorderEXECUTE
à la fonction de lecture associée à un flux de modifications. Pour en savoir plus, consultez la section Contrôle des accès précis pour les flux de modifications. - Séquences
- Vous pouvez attribuer
SELECT
etUPDATE
aux séquences. Pour en savoir plus, consultez la section 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 la section Contrôle des accès précis pour les modèles.
Rôles du système de contrôle des accès précis
Le contrôle des accès ultraprécis dispose de 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 de contrôle d'accès précis doit se voir attribuer le rôle système spanner_sys_reader
pour accéder au visualiseur de clés et le rôle système spanner_info_reader
pour pouvoir afficher des résultats non filtrés lors de l'interrogation des tables INFORMATION_SCHEMA
.
Pour en savoir plus, consultez la section Rôles du système de contrôle des accès pré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, où les rôles enfants héritent des droits des rôles parents. Les rôles enfants sont appelés membres du rôle parent.
Prenons l'exemple des 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
.
hr_manager
et hr_director
peuvent également avoir des membres, et ces membres hériteraient du droit SELECT
sur employees
.
Il n'existe aucune limite quant à 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 des définitions de 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 base de données. Vous devez donc accorder à nouveau l'accès aux rôles de base de données aux principaux de la base de données restaurée.
Présentation de la configuration du contrôle précis des accès
Vous trouverez ci-dessous les étapes générales à suivre pour commencer à sécuriser les données à l'aide d'un contrôle précis des accès. Pour en savoir plus, consultez la section Configurer le contrôle des accès ultraprécis.
Vous devez disposer des rôles IAM roles/spanner.admin
ou roles/spanner.databaseAdmin
pour effectuer ces tâches.
- Créez des rôles de base de données et accordez-leur des droits.
- Facultatif: Créez des hiérarchies de rôles avec héritage en attribuant des rôles à d'autres rôles.
- Suivez ces étapes pour chaque compte principal qui doit être un utilisateur de contrôle d'accès précis :
- Activez le contrôle des accès précis pour l'entité principale.
Le rôle de base de données
public
, qui ne dispose d'aucun droit par défaut, est alors automatiquement attribué au principal. Il s'agit d'une opération unique pour chaque principal. - Accordez des autorisations IAM sur un ou plusieurs rôles de base de données au principal.
- Une fois que le compte principal a reçu tous les rôles de base de données requis, si le compte principal dispose de rôles IAM au niveau de la base de données, envisagez de révoquer les rôles au niveau de la base de données afin que le contrôle des accès du compte principal ne soit géré que par une seule méthode.
- Activez le contrôle des accès précis pour l'entité principale.
Le rôle de base de données
Limites
- Les opérations d'exportation n'exportent pas les rôles et les privilèges de 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 d'accès précis.
Étape suivante
- Accéder à une base de données avec un contrôle précis des accès
- Contrôle précis des accès pour les flux de modifications
- Configurer un contrôle précis des accès
- Référence des droits de contrôle précis des accès
- Rôles système de contrôle précis des accès
- Instructions
GRANT
etREVOKE
GoogleSQL - Instructions
GRANT
etREVOKE
PostgreSQL - Contrôle précis des accès pour les séquences
- Contrôle précis des accès aux modèles