Présentation des vues

Ce document présente et décrit les vues Spanner.

Présentation

Une vue est une table virtuelle définie par une requête SQL. Lorsque vous créez une vue, vous spécifiez la requête SQL qu'elle représente. Une fois que vous avez créé une vue, vous pouvez exécuter des requêtes qui font référence à cette vue comme s'il s'agissait d'une table.

Lorsqu'une requête faisant référence à une vue est exécutée, Spanner crée la table virtuelle en exécutant la requête définie dans la vue, et le contenu de cette table virtuelle est utilisé par la requête de référence.

Étant donné que la requête définissant une vue est exécutée chaque fois qu'une requête faisant référence à la vue est exécutée, les vues sont parfois appelées "vues logiques" ou "vues dynamiques" pour les distinguer des vues matérialisées SQL, qui stockent les résultats de la requête définissant la vue en tant que table réelle dans le stockage de données.

Dans Spanner, vous pouvez créer une vue en tant que vue des droits de l'appelant ou vue des droits du créateur. Il s'agit des deux types de modèles de sécurité qui contrôlent l'accès des utilisateurs à une vue.

Vues avec droits de l'appelantVues des droits du créateur
Description Si vous créez une vue avec les droits de l'appelant, un rôle de base de données doit disposer de droits sur la vue et sur tous les objets de schéma auxquels la vue fait référence pour interroger la vue. Pour en savoir plus, consultez Vues des droits de l'appelant. Si vous créez une vue avec les droits du créateur, un rôle de base de données doit disposer de droits sur la vue (et uniquement sur la vue) pour l'interroger. Utilisez le contrôle ultraprécis des accès avec la vue des droits du définisseur. Sinon, la vue des droits du définisseur n'ajoute aucun contrôle des accès supplémentaire. Pour en savoir plus, consultez Vues des droits du créateur.
Autorisations requises pour créer la vue Pour créer, accorder et révoquer l'accès à l'un ou l'autre des types de vues, vous devez disposer de l'autorisation spanner.database.updateDdl au niveau de la base de données.
Droits requis pour interroger la vue Un rôle de base de données doit disposer de droits d'accès à la vue et à tous ses objets de schéma sous-jacents pour interroger la vue. Un rôle de base de données doit disposer de droits d'accès à la vue (et uniquement à la vue) pour l'interroger.

Vues paramétrées

Une vue paramétrée améliore les vues standards pour offrir une meilleure protection des données, en particulier dans les applications utilisant des agents IA ou des grands modèles de langage (LLM). Son objectif principal est d'injecter de manière sécurisée des paramètres, tels que l'identité de l'utilisateur, directement dans la définition de la vue. Ce type de vue nécessite le modèle de sécurité de vue des droits du définisseur, qui permet à Spanner d'appliquer de manière dynamique la sécurité au niveau des lignes en fonction de l'utilisateur qui effectue la requête.

Pour en savoir plus, consultez la présentation des vues paramétrées.

Avantages des vues

Les vues offrent plusieurs avantages par rapport à l'inclusion des requêtes qu'elles définissent dans la logique d'application.

  • Les vues peuvent fournir une modélisation logique des données aux applications.

    Parfois, les choix qui ont du sens pour la modélisation des données physiques sur Spanner ne sont pas la meilleure abstraction pour les applications qui lisent ces données. Une vue peut présenter un schéma de table alternatif qui est une abstraction plus appropriée pour les applications.

  • Les vues centralisent les définitions de requêtes et simplifient la maintenance.

    En créant des vues pour des requêtes complexes ou largement utilisées, vous pouvez factoriser le texte des requêtes à partir d'applications et le centraliser. Cela facilite considérablement le maintien de la mise à jour du texte des requêtes dans les applications et permet la révision et le réglage des requêtes sans que le code d'application soit modifié.

  • Les vues garantissent la stabilité des modifications de schéma.

    Étant donné que la requête qui définit une vue est stockée dans le schéma de base de données plutôt que dans la logique d'application, Spanner peut s'assurer que les modifications de schéma apportées aux objets (tables, colonnes, etc.) auxquels la requête fait référence n'invalident pas la requête.

Cas d'utilisation courants

Utilisez des vues lorsque votre base de données Spanner inclut des données hautement privilégiées qui ne doivent pas être exposées à tous les utilisateurs de la base de données, ou si vous souhaitez encapsuler vos données.

Si votre vue ne nécessite pas de fonctionnalités de sécurité supplémentaires et que tous les appelants de la vue ont accès à tous les objets de schéma auxquels la vue fait référence, créez une vue des droits de l'appelant.

Si vous souhaitez créer une vue dans laquelle tous les appelants n'ont pas accès à tous les objets de schéma auxquels la vue fait référence, créez une vue des droits du définisseur. Les vues de droits du créateur sont mieux protégées et comportent plus de restrictions, car l'administrateur de la base de données peut accorder des droits à moins d'utilisateurs sur les tables et les colonnes référencées dans la vue. Les vues de droits du définisseur sont utiles lorsqu'un utilisateur a besoin d'un moyen d'accéder de manière sécurisée à un sous-ensemble pertinent d'une base de données Spanner. Par exemple, vous pouvez créer une vue des droits du créateur pour les données suivantes :

  • Données du compte personnel (par exemple, client de l'application).
  • Données spécifiques au rôle (par exemple, personnel RH, commercial).
  • Données spécifiques à l'emplacement.

Vues avec droits de l'appelant

Si une vue dispose des droits de l'appelant, cela signifie que lorsqu'un utilisateur (l'appelant) exécute une requête sur la vue, Spanner vérifie les droits de l'utilisateur sur la vue et sur tous les objets de schéma auxquels la vue fait référence. L'utilisateur doit disposer de droits sur tous les objets de schéma pour interroger la vue.

Vues des droits du créateur

Une vue des droits d'un définisseur ajoute des fonctionnalités de sécurité supplémentaires à la vue. Il fournit différents droits sur la vue et les objets de schéma sous-jacents. Comme pour les vues de droits de l'appelant, les utilisateurs doivent disposer d'autorisations au niveau de la base de données pour créer des vues de droits du définisseur. La principale différence est que lorsqu'un rôle de base de données interroge une vue des droits du définisseur, Spanner vérifie que le rôle a accès à la vue elle-même (et uniquement à la vue). Par conséquent, même si l'utilisateur qui interroge la vue n'a pas accès à tous les objets de schéma sous-jacents, il peut accéder à la vue et voir son contenu. Les vues avec droits du créateur permettent aux utilisateurs d'accéder à des données actualisées, limitées aux lignes définies dans la vue.

Les autorisations IAM (Identity and Access Management) de Spanner sont accordées au niveau de la base de données. Utilisez le contrôle ultraprécis des accès avec la vue des droits du créateur. Sinon, la vue des droits du créateur n'ajoute aucun contrôle des accès supplémentaire. En effet, si l'utilisateur dispose d'autorisations de lecture sur la base de données, il dispose d'autorisations de lecture sur tous les objets de schéma de la base de données. Après avoir configuré le contrôle ultraprécis des accès sur votre base de données, les utilisateurs du contrôle ultraprécis des accès disposant du droit SELECT sur la vue et les utilisateurs disposant d'autorisations au niveau de la base de données peuvent interroger la vue. La différence est que l'utilisateur du contrôle ultraprécis des accès n'a pas besoin de droits sur les objets sous-jacents.

Limites des vues

Les vues comportent des limites par rapport aux tables réelles, ce qui les rend inappropriées pour certains cas d'utilisation.

  • Les vues sont en lecture seule. Elles ne peuvent pas être utilisées pour ajouter, mettre à jour ou supprimer des données.

    Vous ne pouvez pas utiliser de vues dans les instructions LMD (INSERT, UPDATE, DELETE).

  • La requête qui définit une vue ne peut pas utiliser de paramètres de requête.

  • Les vues ne peuvent pas être indexées.

  • Les références aux vues ne peuvent pas utiliser d'optimisations de table.

    Cependant, la requête qui définit une vue peut inclure des optimisations de table sur les tables auxquelles elle fait référence.

  • Les vues ne sont pas compatibles avec l'API Read.

  • Les vues de droits du définisseur ne sont pas compatibles avec Spanner Data Boost.

    L'exécution d'une requête contenant une vue des droits d'un définisseur dans Data Boost entraîne une erreur.

  • Le mode de requête recommandé pour accéder à une vue des droits d'un définisseur est le mode NORMAL.

    Les utilisateurs qui n'ont pas accès aux objets de schéma sous-jacents d'une vue des droits d'un définisseur reçoivent une erreur lorsqu'ils effectuent une requête dans un mode de requête autre que normal.

  • Un utilisateur peut créer une requête soigneusement conçue qui amène Spanner à générer une erreur qui affiche ou révèle l'existence de données qui ne sont pas disponibles dans la vue des droits du définisseur.

    Par exemple, supposons qu'il existe la vue QualifiedStudentScores suivante, qui renvoie les notes des élèves qui remplissent les conditions requises pour un cours. Les critères d'éligibilité sont basés sur le niveau et le score de l'élève à l'examen. Si le niveau de l'élève est inférieur ou égal à six, le score est important et l'élève doit obtenir au moins 50 points à l'examen pour être admis. Sinon, pour les niveaux supérieurs ou égaux à six, l'élève est qualifié par défaut.

      CREATE VIEW QualifiedStudentScores
      SQL SECURITY DEFINER AS
      SELECT
        s.Name,
        s.Level,
        sc.Score
      FROM Students AS s
      JOIN Scores AS sc ON sc.StudentId = s.StudentId
      WHERE
      (CASE
        WHEN (s.Level < 6) OR (s.Level >= 6 AND sc.Score >= 50)
          THEN 'QUALIFIED';
        ELSE 'FAILED';
      END) = 'QUALIFIED';
    

    Un utilisateur peut exécuter une requête sous la forme SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;. Cette requête peut échouer avec une erreur de division par zéro si un élève du niveau 7 a obtenu un score de 20 points, même si la vue limite les données à 50 points et plus pour ce niveau.

Performances des requêtes lors de l'utilisation de vues

Une requête qui fait référence à une vue offre des performances comparables à cette requête avec sa référence de vue remplacée par la définition de la vue.

Quotas et limites applicables aux vues

  • La page Quotas et limites répertorie les informations sur les quotas et les limites spécifiques aux vues.

  • L'utilisation d'une vue dans une requête peut affecter sa conformité avec les limites de requêtes, car la définition de la vue fait partie de la requête.

Impact sur les coûts

L'utilisation de vues a un impact très faible sur le coût d'une instance:

  • L'utilisation de vues n'a aucun impact sur les besoins en termes de capacité de calcul d'une instance, par rapport à l'intégration de leur texte de requête défini dans des requêtes qui y font référence.

  • L'utilisation de vues a très peu d'impact sur le stockage de base de données d'une instance, car la table générée par l'exécution de la définition de requête d'une vue n'est pas enregistrée dans le stockage persistant de la base de données.

Étapes suivantes