En este tutorial se describe cómo usar vistas seguras parametrizadas en AlloyDB para PostgreSQL para restringir el acceso de los usuarios a vistas parametrizadas mediante AlloyDB Studio o psql.
Se incluyen ejemplos para ilustrar las funciones de las vistas seguras parametrizadas. Estos ejemplos se incluyen únicamente a modo de demostración.
Objetivos
- Crea vistas parametrizadas seguras con parámetros de vista con nombre.
- Crea el rol de base de datos que usa la aplicación para conectarse a la base de datos y acceder a vistas seguras parametrizadas.
- Concede permisos al nuevo rol para acceder a las vistas protegidas y revoca el acceso a las tablas base.
- Conéctate con el nuevo rol y comprueba que no se puede acceder a las tablas restringidas.
- Ejecuta consultas en la vista segura parametrizada mediante la función
execute_parameterized_query
.
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
Habilitar la facturación y las APIs necesarias
En la Google Cloud consola, selecciona un proyecto.
Comprueba que la facturación esté habilitada en tu Google Cloud proyecto.
Habilita las APIs de Cloud necesarias para crear una instancia de AlloyDB para PostgreSQL y conectarte a ella.
- En el paso Confirm project (Confirmar proyecto), haz clic en Next (Siguiente) para confirmar el nombre del proyecto en el que vas a hacer cambios.
En el paso Habilitar APIs, haz clic en Habilitar para habilitar lo siguiente:
- API de AlloyDB
Crear una base de datos y conectarse a ella
Prepara tu entorno
Para preparar la ejecución de consultas en una vista segura parametrizada, primero debes configurar las vistas parametrizadas, la base de datos y los roles de la base de datos, la extensión parameterized_view
y el esquema de la aplicación.
Habilita la extensión necesaria
Habilita la marca de base de datos parameterized_views.enabled
, que carga las bibliotecas de extensiones necesarias. Para obtener más información, consulta el artículo sobre cómo configurar las marcas de la base de datos de una instancia.
Configurar la base de datos
- Crea una base de datos llamada
database
para los datos de la aplicación y las vistas parametrizadas. Para obtener más información, consulta Crear una base de datos.
Crear roles de base de datos, la extensión y el esquema de la aplicación
Conéctate a la base de datos con AlloyDB Studio o psql como usuario
postgres
o como usuario con privilegios de superusuario de AlloyDB.psql database -U postgres
Para obtener más información, consulta Información sobre la gestión de usuarios de bases de datos en AlloyDB.
Crea la extensión
parameterized_views
en la base de datos.-- Requires parameterized_views.enabled set to true CREATE EXTENSION parameterized_views;
Cuando se crea la extensión, el sistema también crea un esquema llamado
parameterized_views
para que las APIs se incluyan en el espacio de nombres de ese esquema y no entren en conflicto con las APIs ya existentes.Crea el rol administrativo de AlloyDB, que es propietario de la base de datos y la gestiona.
CREATE ROLE admin_user WITH LOGIN PASSWORD '...'; GRANT ALL PRIVILEGES ON DATABASE database TO admin_user;
Para obtener más información, consulta
CREATE USER
.Crea un rol de base de datos para ejecutar consultas en vistas seguras parametrizadas. Es un rol de AlloyDB que usa la aplicación para conectarse y acceder a la base de datos para ejecutar consultas con acceso limitado a funciones u objetos públicos al conjunto mínimo necesario.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';
Para obtener más información, consulta
CREATE USER
.Conéctate como usuario administrativo.
SET role TO admin_user;
Crea el esquema que contiene las tablas.
CREATE SCHEMA schema;
Crea las tablas e inserta los datos.
CREATE TABLE schema.checked_items(bag_id INT,timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT); INSERT INTO schema.checked_items (bag_id, timestamp, loc_code, scan_type, location, customer_id) VALUES (101, '2023-10-26 10:00:00', 'ABC', 'I', 'Warehouse A', 123), (102, '2023-10-26 10:15:30', 'DEF', 'O', 'Loading Dock B', 456), (103, '2023-10-26 10:30:45', 'GHI', 'I', 'Conveyor Belt 1', 789), (104, '2023-10-26 11:00:00', 'JKL', 'O', 'Shipping Area C', 101), (105, '2023-10-26 11:45:15', 'MNO', 'I', 'Sorting Station D', 202), (106, '2023-10-26 12:00:00', 'PQR', 'O', 'Truck Bay E', 303);
Crear vistas parametrizadas seguras y configurar privilegios de acceso
Para crear vistas parametrizadas seguras y configurar los privilegios de acceso adecuados para la tabla base y las vistas, sigue estos pasos:
Conéctate a la base de datos como
admin_user
mediante AlloyDB Studio o psql.psql database -U admin_user
Para proporcionar acceso limitado a la vista, crea una vista segura parametrizada:
CREATE VIEW schema.secure_checked_items WITH (security_barrier) AS SELECT bag_id, timestamp, location FROM schema.checked_items t WHERE customer_id = $@app_end_userid;
Concede acceso a la vista.
GRANT SELECT ON schema.secure_checked_items TO psv_user;
Para acceder a la vista, concede acceso al esquema.
GRANT USAGE ON SCHEMA schema TO psv_user;
Revoca el acceso directo a la tabla base.
REVOKE ALL PRIVILEGES ON schema.checked_items FROM psv_user;
Verificar la seguridad de los datos
Para verificar que las vistas seguras parametrizadas restringen el acceso a las vistas designadas, ejecuta los siguientes comandos como psv_user
. Se trata de un rol de base de datos de AlloyDB que la aplicación usa para conectarse y acceder a la base de datos para ejecutar consultas.
Conéctate como usuario de vistas seguras parametrizadas.
psql database -U psv_user
Comprueba que no se puede acceder a la tabla base.
SELECT * FROM schema.checked_items; ERROR: permission denied for table checked_items
Accede a la vista segura parametrizada mediante la función
execute_parameterized_query
:SELECT * FROM parameterized_views.execute_parameterized_query( query => 'SELECT * from schema.secure_checked_items', param_names => ARRAY ['app_end_userid'], param_values => ARRAY ['303'] );
Para mejorar la seguridad de las consultas generadas en lenguaje natural, integra tus vistas seguras parametrizadas mediante el lenguaje natural de AlloyDB AI.
Limpieza
Para evitar que los recursos utilizados en este tutorial se cobren en tu cuenta de Google Cloud, elimina el proyecto que contiene los recursos o conserva el proyecto y elimina los recursos.
En la Google Cloud consola, ve a la página Clusters.
En la columna Nombre del recurso, haz clic en el nombre de tu clúster,
my-cluster
.Haz clic en delete Eliminar clúster.
En Eliminar clúster my-cluster, introduce
my-cluster
para confirmar que quieres eliminar el clúster.Haz clic en Eliminar.
Si has creado una conexión privada al crear un clúster, ve a la página Redes de la consola Google Cloud y haz clic en Eliminar red de VPC.
Conéctate a la base de datos como
postgres
mediante AlloyDB Studio o psql.psql database -U postgres
Elimina los objetos que hayas creado.
DROP VIEW schema.secure_checked_items; DROP TABLE schema.checked_items; DROP SCHEMA schema; DROP ROLE psv_user; DROP ROLE admin_user; DROP EXTENSION parameterized_views;
Siguientes pasos
- Consulta información sobre las vistas seguras parametrizadas.
- Consulta cómo gestionar la seguridad de los datos de las aplicaciones mediante vistas seguras parametrizadas.