Las vistas seguras parametrizadas proporcionan seguridad de los datos y control de acceso a las filas para las aplicaciones. Filtran los resultados de la consulta según la identidad del usuario de la aplicación.
En este instructivo, se describe cómo configurar vistas seguras parametrizadas en Cloud SQL, configurar roles y privilegios de bases de datos para restringir el acceso a las tablas base y verificar la seguridad de los datos. Los ejemplos que se proporcionan en este documento son solo para fines de demostración.
¿Qué son las vistas seguras parametrizadas?
Como práctica recomendada general, tu aplicación debe ejecutarse con una cuenta de servicio que tenga el acceso mínimo requerido a tu base de datos. Por ejemplo, si tu aplicación no debe escribir en tu base de datos, debe usar un rol con acceso de solo lectura. Debes configurar estos controles de acceso a nivel de la base de datos.
Cuando tu aplicación necesita una seguridad más detallada que la que permiten los accesos estándar a nivel de la base de datos, puedes usar vistas seguras parametrizadas para asegurarte de que los usuarios solo vean los datos autorizados. Las vistas seguras parametrizadas proporcionan seguridad de los datos dinámica y control de acceso a las filas adecuado para aplicaciones de SaaS multiusuario sin necesidad de roles de base de datos independientes para cada usuario final de la aplicación.
El uso de vistas seguras parametrizadas proporciona tres beneficios principales:
- Seguridad de los datos dinámica y control de acceso a las filas: Filtra las consultas con identificadores de usuario final para que los usuarios accedan solo a sus datos autorizados, independientemente de la frase de la consulta.
- Administración de roles más sencilla: Usa un solo rol de base de datos compartido para todos los usuarios de la aplicación en lugar de administrar roles de base de datos independientes para cada persona.
Objetivos
- Crear vistas seguras parametrizadas 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 las vistas seguras parametrizadas.
- Otorga los permisos del rol nuevo a las vistas seguras parametrizadas y revoca el acceso a las tablas base.
- Conéctate con el rol nuevo y verifica que no se pueda acceder a las tablas restringidas.
- Ejecuta consultas en la vista parametrizada con el
procedimiento almacenado
mysql.execute_parameterized_queryo con la API de QueryData.
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.
Es posible que los usuarios nuevos de Google Cloud cumplan con los requisitos para acceder a una prueba gratuita.
Para evitar que se te siga facturando, borra los recursos que creaste cuando termines las tareas de este documento. Para obtener más información, consulta Cómo realizar una limpieza.
Antes de comenzar
Antes de crear vistas seguras parametrizadas, completa los siguientes requisitos previos.
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 proyecto de Google Cloud .
Habilita las API de Cloud necesarias para crear una instancia de Cloud SQL y conectarte a ella.
En el paso Confirmar proyecto, haz clic en Siguiente 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 Cloud SQL para MySQL
- API de Knowledge Catalog
- API de Data Analytics with Gemini (
geminidataanalytics.googleapis.com)
Crea una base de datos y conéctate a ella
- Crea una instancia.
- Conéctate a tu instancia y crea una base de datos.
Habilita la API de Cloud SQL Data en tu instancia de Cloud SQL para MySQL para que la API de
QueryDatapueda ejecutar consultas en ella:gcloud sql instances patch INSTANCE_ID \ --project=PROJECT_ID \ --data-api-access=ALLOW_DATA_APIReemplaza lo siguiente:
INSTANCE_ID: Es el ID de tu instancia de Cloud SQL para MySQL.PROJECT_ID: Es el ID del proyecto de Google Cloud .
Otorga los roles necesarios y crea un usuario de la base de datos de IAM
Para autenticarte con Identity and Access Management (IAM) y ejecutar solicitudes de queryData en vistas seguras parametrizadas, configura el usuario o la cuenta de servicio de IAM:
Otorga los siguientes roles de IAM a
IAM_USER_EMAILen tu proyecto de Google Cloud :roles/geminidataanalytics.queryDataUserroles/serviceusage.serviceUsageConsumerroles/cloudsql.instanceUser
Para obtener más información sobre cómo otorgar roles de IAM, consulta Agrega una vinculación de política de IAM para un proyecto.
Habilita la autenticación de la base de datos de IAM en tu instancia de Cloud SQL y agrega
IAM_USER_EMAILcomo usuario de la base de datos de IAM en la instancia. Debes crear este usuario de base de datos de IAM antes de otorgarle el rol de base de datospsv_user. Para obtener más información sobre cómo configurar usuarios de la base de datos de IAM, consulta Administra usuarios con autenticación de la base de datos de IAM.
Prepara el entorno
Para prepararte para ejecutar consultas en una vista segura parametrizada, configura la base de datos, los roles de la base de datos y el esquema de la aplicación.
Habilita la marca de base de datos
- Asegúrate de que tu instancia de Cloud SQL para MySQL ejecute la versión 8.0.43 o posterior de Cloud SQL para MySQL. Si tu instancia de Cloud SQL para MySQL 8.0 ejecuta una versión secundaria anterior, puedes realizar una actualización de versión secundaria.
- Habilita la marca de base de datos
cloudsql_parameterized_secure_viewpara tu instancia. Este cambio de marca no requiere que se reinicie la base de datos. Para obtener más información, consulta Configura las marcas de base de datos de una instancia.
Configura la base de datos y los roles
En la consola de Google Cloud , ve a la página de Cloud SQL.
Elige una instancia de la lista.
En el menú de navegación, haz clic en Cloud SQL Studio.
Accede a Studio con una cuenta de usuario administrador.
Haz clic en Autenticar. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
Haz clic en Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.
Crea una base de datos llamada
store_dbpara las vistas y los datos de la aplicación:CREATE DATABASE IF NOT EXISTS store_db; USE store_db;Crea un rol de base de datos nuevo para ejecutar consultas en vistas parametrizadas. La aplicación usa este rol para conectarse a la base de datos y ejecutar consultas con acceso restringido estrictamente a las vistas autorizadas:
CREATE ROLE 'psv_user';
Crea la tabla y, luego, inserta datos
En la consola de Google Cloud , ve a la página de Cloud SQL.
Selecciona una instancia de Cloud SQL para MySQL de la lista.
En el menú de navegación, haz clic en Cloud SQL Studio.
Accede a Studio con la autenticación de la base de datos.
Haz clic en Nueva pestaña para abrir una nueva pestaña del editor de SQL.
Crea las tablas y, luego, inserta los datos:
CREATE TABLE store_db.checked_items ( bag_id INT, timestamp TIMESTAMP, loc_code CHAR(3), scan_type CHAR(1), location TEXT, customer_id INT ); INSERT INTO store_db.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 seguras parametrizadas y configurar privilegios de acceso
Para crear vistas seguras parametrizadas, sigue estos pasos:
En la consola de Google Cloud , ve a la página de Cloud SQL.
Elige una instancia de la lista.
En el menú de navegación, haz clic en Cloud SQL Studio.
Accede a Studio y conéctate a la base de datos de
store_dbcomo la cuenta de usuario administrador, comorootoADMIN_USER, que usaste en la sección anterior.Haz clic en Autenticar. En el panel Explorador, se muestra una lista de los objetos de tu base de datos.
Haz clic en Nueva pestaña del editor de SQL o Nueva pestaña para abrir una pestaña nueva.
Para proporcionar acceso limitado a la vista, crea una vista parametrizada:
CREATE VIEW store_db.secure_checked_items AS SELECT bag_id, timestamp, location FROM store_db.checked_items t WHERE customer_id = @app_end_userid;Otorga acceso SELECT en la vista parametrizada al rol
psv_user:GRANT SELECT ON store_db.secure_checked_items TO 'psv_user';Otorga permiso de ejecución en el procedimiento almacenado del sistema integrado que se usa para ejecutar consultas parametrizadas de forma segura:
GRANT EXECUTE ON PROCEDURE mysql.execute_parameterized_query TO 'psv_user';Es opcional. Revoca de forma explícita cualquier privilegio directo en la tabla base de
psv_userpara asegurarte de que los usuarios no puedan omitir la vista segura:REVOKE ALL PRIVILEGES ON store_db.checked_items FROM 'psv_user';Asegúrate de que se haya agregado
IAM_USER_EMAILa la instancia como un usuario de la base de datos de IAM y, luego, otorga el rolpsv_useral usuario de la base de datos autenticado por IAM o a la cuenta de acceso de la aplicación:GRANT 'psv_user' TO 'IAM_USERNAME'@'%'; SET DEFAULT ROLE 'psv_user' TO 'IAM_USERNAME'@'%';Reemplaza
IAM_USERNAMEpor el nombre de usuario de la base de datos de IAM o la cuenta de acceso de la aplicación. En el caso de una cuenta de usuario de IAM, Cloud SQL para MySQL quita@y el nombre de dominio de la dirección de correo electrónico, por lo que debes especificar el prefijo del correo electrónico antes de@, comouserparauser@example.com.
Verifica la seguridad de los datos
Para verificar que puedes consultar las vistas seguras parametrizadas, sigue estos pasos:
Accede a Cloud SQL Studio con la dirección de correo electrónico de IAM restringida o el acceso a la aplicación.
Haz clic en Nueva pestaña para abrir una nueva pestaña del editor de SQL.
Consulta la tabla base y verifica que se deniegue el acceso.
SELECT * FROM store_db.checked_items;La base de datos devuelve el error
ERROR 1142 (42000): SELECT command denied to user 'IAM_USERNAME'@'%' for table 'checked_items'.Consulta la vista segura parametrizada con el procedimiento almacenado
mysql.execute_parameterized_queryintegrado.CALL mysql.execute_parameterized_query( 'SELECT * FROM store_db.secure_checked_items', 'app_end_userid=303' );Accede a Google Cloud CLI como
IAM_USER_EMAILejecutandogcloud auth application-default loginpara quegcloud auth application-default print-access-tokengenere un token para el usuario de la base de datos de IAM restringido y, luego, consulta las vistas seguras parametrizadas con el métodoqueryDatacon parámetros de PSV:curl -X POST \ "https://geminidataanalytics.googleapis.com/v1beta/projects/PROJECT_ID/locations/REGION:queryData" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "x-goog-user-project: PROJECT_ID" \ -H "Content-Type: application/json; charset=utf-8" \ -d '{ "prompt": "Show me the checked items.", "context": { "datasource_references": { "cloud_sql_reference": { "database_reference": { "engine": "MYSQL", "project_id": "PROJECT_ID", "region": "REGION", "instance_id": "INSTANCE_ID", "database_id": "DATABASE_ID", "table_ids": [ "secure_checked_items" ] } } }, "parameterized_secure_view_parameters": { "parameters": [ { "key": "app_end_userid", "value": "303" } ] } }, "generation_options": { "generate_query_result": true, "generate_natural_language_answer": true, "generate_explanation": true } }'Usa el campo
table_idsendatabase_referencepara asegurarte de queQueryDatasolo genere SQL en la vista segura parametrizadasecure_checked_items. Si omitestable_idsy el rol de la base de datos tiene accesoSELECTa la tabla basechecked_items,QueryDatapodría consultar la tabla base directamente, lo que omitiría la vista segura.Reemplaza lo siguiente:
PROJECT_ID: Es el ID del proyecto de Google Cloud .REGION: Es la región en la que se encuentra tu instancia de Cloud SQL para MySQL.INSTANCE_ID: Es el ID de tu instancia de Cloud SQL para MySQL.DATABASE_ID: Es el ID de tu base de datos de Cloud SQL para MySQL, que esstore_dben este instructivo.
Realiza una limpieza
Borra la instancia
Cuando borras la instancia que creaste en la sección Antes de comenzar, también borras todos los objetos que creaste.
En la consola de Google Cloud , ve a la página de Cloud SQL.
Elige una instancia de la lista.
Haz clic en Borrar.
Para confirmar que deseas borrar la instancia, ingresa su nombre y haz clic en Borrar.
¿Qué sigue?
Obtén información sobre las vistas seguras parametrizadas.
Obtén más información para usar vistas seguras parametrizadas.