Ce tutoriel explique comment utiliser des vues sécurisées paramétrées dans Cloud SQL pour PostgreSQL afin de limiter l'accès des utilisateurs aux vues paramétrées à l'aide de Cloud SQL Studio ou de psql.
Objectifs
- Créez des vues paramétrées sécurisées avec des paramètres de vue nommés.
- Créez le rôle de base de données utilisé par l'application pour se connecter à la base de données et accéder aux vues sécurisées paramétrées.
- Accordez au nouveau rôle les autorisations d'accès aux vues sécurisées et révoquez l'accès aux tables de base.
- Connectez-vous à l'aide du nouveau rôle et vérifiez que vous ne pouvez pas accéder aux tables restreintes.
- Exécutez des requêtes sur la vue sécurisée paramétrée à l'aide de la fonction
execute_parameterized_query.
Préparer votre environnement
Activez l'option de base de données
cloudsql.enable_parameterized_viewspour votre instance Cloud SQL. La modification de cette option nécessite un redémarrage de la base de données.Connectez-vous à votre base de données en tant qu'utilisateur
postgres.psql -U postgresCréez l'extension
parameterized_viewsdans la base de données.CREATE EXTENSION parameterized_views;Créez un rôle de base de données pour exécuter les requêtes.
CREATE ROLE psv_user WITH LOGIN PASSWORD 'PASSWORD';Créez un schéma et une table pour les données de l'application.
CREATE SCHEMA app_schema; CREATE TABLE app_schema.items(item_id INT, item_name TEXT, description TEXT, owner_id INT); INSERT INTO app_schema.items (item_id, item_name, description, owner_id) VALUES (1, 'Book', 'A great read', 123), (2, 'Laptop', 'Work machine', 456), (3, 'Pencil', 'For writing', 123);
Créer des vues paramétrées sécurisées et configurer les droits d'accès
Créez une vue sécurisée paramétrée :
CREATE VIEW app_schema.user_items_view WITH (security_barrier) AS SELECT item_id, item_name, description FROM app_schema.items WHERE owner_id = $@current_user_id;Accordez l'accès à la vue et au schéma au rôle d'application.
GRANT USAGE ON SCHEMA app_schema TO psv_user; GRANT SELECT ON app_schema.user_items_view TO psv_user;Révoquez l'accès direct à la table de base.
REVOKE ALL PRIVILEGES ON app_schema.items FROM psv_user;
Vérifier la sécurité des données
Connectez-vous en tant qu'utilisateur
psv_user.psql -U psv_user -d postgresVérifiez que la table de base n'est pas accessible.
SELECT * FROM app_schema.items; -- ERROR: permission denied for table itemsAccédez à la vue sécurisée paramétrée à l'aide de la fonction
execute_parameterized_query:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from app_schema.user_items_view', param_names => ARRAY ['current_user_id'], param_values => ARRAY ['123'] );Le résultat ne doit inclure que les éléments pour lesquels
owner_idest défini sur123.
Étapes suivantes
- En savoir plus sur les vues sécurisées paramétrées
- Découvrez comment gérer la sécurité des données d'application à l'aide de vues sécurisées paramétrées.