En este instructivo, se describe cómo usar vistas seguras con parámetros en AlloyDB para PostgreSQL para restringir el acceso de los usuarios a las vistas con parámetros a través de AlloyDB Studio o psql. Se incluyen ejemplos para ilustrar las capacidades de las vistas seguras parametrizadas. Estos ejemplos solo se proporcionan con fines ilustrativos.
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 con parámetros.
- Otorga permisos al nuevo rol para acceder a las vistas seguras y revoca el acceso a las tablas básicas.
- Conéctate con el nuevo rol y verifica que no se pueda acceder a las tablas restringidas.
- Ejecuta consultas en la vista segura con parámetros usando la función
execute_parameterized_query
.
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costos en función del uso previsto, usa la calculadora de precios.
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Antes de comenzar
Solicitar acceso
Antes de que puedas usar vistas seguras con parámetros, debes solicitar acceso a las vistas seguras con parámetros de AlloyDB y esperar a recibir la confirmación de habilitación antes de comenzar.
Habilita la facturación y las APIs obligatorias
En la consola de Google Cloud , selecciona un proyecto.
Asegúrate de tener habilitada la facturación para tu Google Cloud proyecto.
Habilita las API de Cloud necesarias para crear y conectarte a AlloyDB para PostgreSQL.
- En el paso Confirm project, haz clic en Next para confirmar el nombre del proyecto en el que realizarás cambios.
En el paso Habilitar APIs, haz clic en Habilitar para habilitar lo siguiente:
- API de AlloyDB
Crea una base de datos y conéctate a ella
Prepara el entorno
Para prepararte para ejecutar 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.
Configura las vistas parametrizadas y la base de datos
Solicita al equipo de AlloyDB que habilite la marca
parameterized_views.enabled database
, que carga las bibliotecas de extensiones requeridas.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 Crea una base de datos.
Crea roles de bases de datos, la extensión y el esquema de la aplicación
Conéctate a la base de datos como el usuario
postgres
o como un usuario con privilegios de superusuario de AlloyDB con AlloyDB Studio o psql.psql database -U postgres
Para obtener más información, consulta Acerca de la administració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 para que esas APIs no entren en conflicto con las APIs existentes.Crea el rol de administrador de AlloyDB, que posee y administra la base de datos.
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 nuevo rol de base de datos para ejecutar consultas en vistas seguras parametrizadas. Este es un rol de AlloyDB que la aplicación usa 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 requerido.
CREATE ROLE psv_user WITH LOGIN PASSWORD '...';
Para obtener más información, consulta
CREATE USER
.Conéctate como usuario administrador.
SET role TO admin_user;
Crea el esquema que contiene las tablas.
CREATE SCHEMA schema;
Crea las tablas y, luego, 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);
Crea vistas parametrizadas seguras y configura privilegios de acceso
Para crear vistas parametrizadas seguras y configurar privilegios de acceso adecuados para la tabla y las vistas básicas, sigue estos pasos:
Conéctate a la base de datos como
admin_user
con AlloyDB Studio o psql.psql database -U admin_user
Para proporcionar acceso limitado a la vista, crea una vista segura con parámetros:
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;
Otorga acceso a la vista.
GRANT SELECT ON schema.secure_checked_items TO psv_user;
Para acceder a la vista, otorga 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;
Verifica la seguridad de los datos
Para verificar que las vistas seguras parametrizadas restrinjan el acceso a las vistas designadas, ejecuta los siguientes comandos como psv_user
. Es 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
Verifica que no se pueda acceder a la tabla básica.
SELECT * FROM schema.checked_items; ERROR: permission denied for table checked_items
Accede a la vista segura parametrizada con 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 con el lenguaje natural de AlloyDB AI.
Limpia
Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.
En la consola de Google Cloud , ve a la página Clústeres.
Haz clic en el nombre de tu clúster,
my-cluster
, en la columna Nombre del recurso.Haz clic en delete Borrar clúster.
En Delete cluster my-cluster, ingresa
my-cluster
para confirmar que deseas borrar el clúster.Haz clic en Borrar.
Si creaste una conexión privada cuando creaste un clúster, ve a la Google Cloud consolapágina Networkingy haz clic en Borrar red de VPC.
Conéctate a la base de datos como
postgres
con AlloyDB Studio o psql.psql database -U postgres
Descarta los objetos que creaste.
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;
¿Qué sigue?
- Obtén información sobre las vistas seguras con parámetros.
- Obtén información para administrar la seguridad de los datos de la aplicación con vistas seguras parametrizadas.