Les vues sécurisées paramétrées dans Cloud SQL pour PostgreSQL assurent la sécurité des données et le contrôle des accès aux lignes pour les applications tout en étant compatibles avec SQL. Ces vues sont compatibles avec l'extraction de valeurs de données (processus de récupération d' éléments de données spécifiques à partir de colonnes) et contribuent à protéger contre les attaques par injection d'invite. Les vues sécurisées paramétrées permettent de s'assurer que les utilisateurs finaux ne peuvent consulter que les données auxquelles ils sont censés avoir accès.
Les vues sécurisées paramétrées sont une extension de vues PostgreSQL, qui vous permet d'utiliser des paramètres de vue nommés spécifiques à l'application dans les définitions de vue. Cette fonctionnalité fournit une interface qui accepte une requête et des valeurs pour les paramètres nommés. Les vues exécutent la requête avec ces valeurs, qui sont utilisées tout au long de l'exécution de cette requête.Exemple de vue sécurisée paramétrée
Voici un exemple de vue sécurisée paramétrée :CREATE VIEW user_specific_items WITH (security_barrier) AS
SELECT item_id, item_name, description
FROM items t
WHERE owner_id = $@app_user_id;
Vous pouvez interroger les vues à l'aide de la fonction execute_parameterized_query ou en exécutant l'instruction EXECUTE .. WITH VIEW PARAMETERS.
Cas d'utilisation
Les grands modèles de langage (LLM) peuvent générer des requêtes SQL qui exposent des données sensibles.
Les vues sécurisées paramétrées gèrent la sécurité des données au niveau de la base de données, en particulier les requêtes ad hoc provenant de sources non fiables, telles que celles traduites à partir du langage naturel. Par exemple, vous pouvez utiliser des vues sécurisées paramétrées pour assurer la sécurité des données pour les applications dans lesquelles les utilisateurs peuvent envoyer des requêtes en langage naturel, comme "Afficher mes commandes".
Vous pouvez utiliser des vues sécurisées paramétrées pour appliquer les exigences suivantes à la façon dont Cloud SQL pour PostgreSQL exécute cette requête :
- La requête ne lit que les objets de base de données et les colonnes que vous avez listés dans vos vues sécurisées paramétrées de base de données.
- La requête ne lit que les lignes de base de données associées à l'utilisateur qui a envoyé la requête. Les lignes renvoyées ont une relation de données avec la ligne de table de l'utilisateur.
Pour en savoir plus sur la configuration de la sécurité et du contrôle des accès, consultez Utiliser des vues sécurisées paramétrées.
Les vues sécurisées paramétrées permettent d'atténuer les risques de sécurité qui se produisent lorsque les utilisateurs finaux sont autorisés à exécuter des requêtes non fiables, telles que des requêtes en langage naturel, sur la table de base de données. Les risques de sécurité incluent les suivants :
- Les utilisateurs peuvent envoyer des attaques par injection d'invite et tenter de manipuler le modèle sous-jacent pour révéler toutes les données auxquelles l'application a accès.
- Le modèle de langage naturel vers SQL (NL2SQL) peut générer des requêtes SQL dont la portée est plus large que ce qui est approprié pour des raisons de sécurité des données. Ce risque de sécurité peut exposer des données sensibles en réponse à des requêtes utilisateur, même bien intentionnées.
À l'aide de vues sécurisées paramétrées, vous pouvez définir les tables et les colonnes à partir desquelles les requêtes non fiables peuvent extraire des données. Ces vues vous permettent de limiter la plage de lignes disponibles pour un utilisateur d'application individuel. Ces restrictions vous permettent également de contrôler étroitement les données que les utilisateurs de l'application peuvent afficher via des requêtes en langage naturel, quelle que soit la façon dont ils formulent ces requêtes.
Par exemple, vous pouvez avoir une application qui suit les commandes client. Un agent d'assistance demande dans l'application : "Quel est l'état de la commande du client 12345 ?" Dans ce scénario, l'application peut utiliser une vue sécurisée paramétrée avec une variable de session basée sur un ID client. La vue sécurisée paramétrée utilise une requête qui ne renvoie que les lignes liées à l'ID client 12345 et accessibles à celui-ci.
En utilisant des vues sécurisées paramétrées, vous pouvez limiter la plage de lignes disponibles pour les utilisateurs d'application individuels. Ce contrôle garantit la sécurité des données, quelle que soit la façon dont les utilisateurs formulent leurs requêtes.
Sécurité des données
Les vues sécurisées paramétrées offrent aux développeurs d'applications la sécurité des données et le contrôle des accès aux lignes à l'aide des méthodes suivantes :
- Les vues créées à l'aide de la
WITH (security barrier)clause fournissent une sécurité au niveau des lignes en empêchant les fonctions et les opérateurs choisis de manière malveillante de transmettre des valeurs à partir de lignes jusqu'à ce que la vue ait terminé son travail. Pour en savoir plus sur laWITH (security barrier)clause, consultez Règles et privilèges.
Les paramètres de vue nommés permettent une vue restreinte de la base de données paramétrée par des valeurs. Les valeurs sont fournies par l'application en fonction de la sécurité au niveau de l'application, telle que l'authentification de l'utilisateur final.
Application de restrictions supplémentaires aux requêtes accédant à des vues paramétrées qui empêchent les attaques visant à échapper aux vérifications dans les vues en fonction des valeurs de paramètres données. Pour en savoir plus, consultez Restrictions sur les requêtes.
Limites
Pour utiliser des vues sécurisées paramétrées, vous devez activer l'option de base de données
cloudsql.enable_parameterized_viewspour votre instance Cloud SQL, ce qui nécessite un redémarrage de la base de données.L'extension
parameterized_viewsdoit être créée dans chaque base de données dans laquelle vous prévoyez de créer des vues sécurisées paramétrées.Une erreur se produit si une vue paramétrée est référencée dans une fonction définie par l'utilisateur qui est appelée à l'aide de l'une des API utilisées dans les vues sécurisées paramétrées, une erreur se produit. Vous devez référencer directement la vue paramétrée dans la requête parente.
- Il existe des restrictions lorsque vous interrogez des vues sécurisées paramétrées. Pour en savoir plus, consultez Restrictions sur les requêtes.