En este documento, se presentan y describen las vistas de Spanner.
Descripción general
Una vista es una tabla virtual definida por una consulta en SQL. Cuando creas una vista, especificas la consulta en SQL que representa. Una vez que hayas creado una vista, podrás ejecutar consultas que hagan referencia a ella como si fuera una tabla.
Cuando se ejecuta una consulta que hace referencia a una vista, Spanner crea la tabla virtual ejecutando la consulta definida en la vista, y el contenido de esa tabla virtual es usado por la consulta de referencia.
Debido a que la consulta que define una vista se ejecuta cada vez que se ejecuta una consulta que hace referencia a la vista, a veces se las llama vistas lógicas o vistas dinámicas para distinguirlas de las vistas materializadas de SQL, que almacenan los resultados de la consulta que define la vista como una tabla real en el almacén de datos.
En Spanner, puedes crear una vista como una vista de derechos del invocador o una vista de derechos del definidor. Son los dos tipos de modelos de seguridad que controlan el acceso de los usuarios a una vista.
| Vistas de derechos del invocador | Vistas de derechos del definidor | |
|---|---|---|
| Descripción | Si creas una vista con derechos de invocador, un rol de base de datos necesita privilegios en la vista y en todos los objetos de esquema a los que hace referencia la vista para consultarla. Para obtener más información, consulta Vistas de derechos del invocador. | Si creas una vista con derechos de definidor, un rol de base de datos necesita privilegios en la vista (y solo en la vista) para consultarla. Usa el control de acceso detallado junto con la vista de derechos del definidor; de lo contrario, la vista de derechos del definidor no agrega ningún control de acceso adicional. Para obtener más información, consulta Vistas de derechos del definidor. |
| Permisos necesarios para crear la vista | Para crear, otorgar y revocar
el acceso a cualquiera de los tipos de vistas, debes tener el permiso spanner.database.updateDdl
a nivel de la base de datos. |
|
| Privilegios necesarios para consultar la vista | Un rol de base de datos necesita privilegios para la vista y todos sus objetos de esquema subyacentes para consultar la vista. | Un rol de base de datos necesita privilegios para la vista (y solo la vista) para consultar la vista. |
Vistas parametrizadas
Una vista parametrizada mejora las vistas estándar para ofrecer una protección de datos más sólida, en especial en aplicaciones que usan agentes de IA o modelos de lenguaje grandes (LLM). Su propósito principal es insertar parámetros de forma segura, como la identidad del usuario, directamente en la definición de la vista. Este tipo de vista requiere el modelo de seguridad de vista de derechos del definidor, que permite que Spanner aplique de forma dinámica la seguridad a nivel de las filas según el usuario que realiza la consulta.
Para obtener más información, consulta Descripción general de las vistas parametrizadas.
Beneficios de las vistas
Las vistas ofrecen varios beneficios en comparación con incluir las consultas que definen en la lógica de la aplicación.
Las vistas pueden proporcionar un modelado de datos lógico a las aplicaciones.
A veces, las opciones que tienen sentido para el modelado de datos físicos en Spanner no son la mejor abstracción para las aplicaciones que leen esos datos. Una vista puede presentar un esquema de tabla alternativo que sea una abstracción más adecuada para las aplicaciones.
Las vistas centralizan las definiciones de las consultas y, por lo tanto, simplifican el mantenimiento.
Si creas vistas para consultas complejas o de uso generalizado, puedes excluir el texto de la consulta de las aplicaciones y centralizarlo. De esta manera, mantener el texto de la consulta actualizado en todas las aplicaciones es mucho más sencillo y permite revisar y ajustar las consultas sin necesidad de cambiar el código de la aplicación.
Las vistas proporcionan estabilidad en los cambios de esquema.
Debido a que la consulta que define una vista se almacena en el esquema de la base de datos en lugar de en la lógica de la aplicación, Spanner puede garantizar que los cambios de esquema en los objetos (tablas, columnas, etcétera) a los que hace referencia la consulta no la invaliden.
Casos de uso habituales
Usa vistas cuando tu base de datos de Spanner incluya datos con privilegios elevados que no se deban exponer a todos los usuarios de la base de datos o si deseas encapsular tus datos.
Si tu vista no necesita funciones de seguridad adicionales y todos los invocadores de la vista tienen acceso a todos los objetos de esquema a los que hace referencia la vista, crea una vista de derechos del invocador.
Si deseas crear una vista en la que no todos los invocadores tengan acceso a todos los objetos de esquema a los que hace referencia la vista, crea una vista de derechos del definidor. Las vistas de derechos del definidor están mejor protegidas y tienen más restricciones, ya que el administrador de la base de datos puede proporcionar menos usuarios con privilegios en las tablas y columnas a las que se hace referencia en la vista. Las vistas de derechos del definidor son útiles cuando un usuario necesita una forma de acceder de forma segura a un subconjunto relevante de una base de datos de Spanner. Por ejemplo, es posible que quieras crear una vista de derechos del definidor para los siguientes datos:
- Datos de la cuenta personal (p. ej., cliente de la aplicación)
- Datos específicos del rol (p. ej., personal de RR.HH., asociado de ventas).
- Datos específicos de la ubicación
Vistas de derechos del invocador
Si una vista tiene derechos de invocador, significa que cuando un usuario, el invocador, ejecuta una consulta en la vista, Spanner verifica los privilegios del usuario en la vista y en todos los objetos de esquema a los que hace referencia la vista. El usuario debe tener privilegios en todos los objetos de esquema para consultar la vista.
Vistas de derechos del definidor
Una vista de derechos del definidor agrega una funcionalidad de seguridad adicional a la vista. Proporciona diferentes privilegios en la vista y los objetos de esquema subyacentes. Al igual que con las vistas de derechos del invocador, los usuarios deben tener permisos a nivel de la base de datos para crear vistas de derechos del definidor. La diferencia principal es que, cuando un rol de base de datos consulta una vista de derechos del definidor, Spanner verifica que el rol tenga acceso a la vista en sí (y solo a la vista). Por lo tanto, incluso si el usuario que consulta la vista no tiene acceso a todos los objetos de esquema subyacentes, puede acceder a la vista y ver su contenido. Las vistas de derechos del definidor les brindan a los usuarios acceso a datos actualizados, limitados a las filas definidas en la vista.
Los permisos de Identity and Access Management (IAM) de Spanner se otorgan a nivel de la base de datos. Usa el control de acceso detallado
junto con la vista de derechos del definidor; de lo contrario, la vista de derechos del definidor no agrega
ningún control de acceso adicional. Esto se debe a que, si el usuario tiene permisos de lectura
en la base de datos, tiene permisos de lectura en todos los objetos de esquema de la
base de datos. Después de configurar el control de acceso detallado en tu base de datos,
los usuarios del control de acceso detallado con el privilegio SELECT en la vista y
los usuarios con permisos a nivel de la base de datos pueden consultar la vista. La
diferencia es que el usuario con control de acceso detallado no necesita privilegios
en los objetos subyacentes.
Limitaciones de las vistas
Las vistas tienen limitaciones en comparación con las tablas reales, lo que las hace inadecuadas para ciertos casos de uso.
Las vistas son de solo lectura. No se pueden usar para agregar, actualizar ni borrar datos.
No puedes usar vistas en sentencias DML (
INSERT,UPDATE,DELETE).La consulta que define una vista no puede usar parámetros de consulta.
No se pueden indexar las vistas.
Las referencias a vistas no pueden usar sugerencias de tabla.
Sin embargo, la consulta que define una vista puede incluir sugerencias de tabla en las tablas a las que hace referencia.
La API de lectura no admite vistas.
Las vistas de derechos del definidor no son compatibles con Data Boost de Spanner.
Ejecutar una consulta que contenga una vista de derechos de definidor en Data Boost genera un error.
El modo de consulta recomendado para acceder a una vista de derechos del definidor es el modo
NORMAL.Los usuarios que no tienen acceso a los objetos de esquema subyacentes de una vista de derechos del definidor reciben un error cuando realizan consultas en un modo de consulta que no es el normal.
Es posible que un usuario cree una consulta cuidadosamente diseñada que haga que Spanner arroje un error que muestre o revele la existencia de datos que no están disponibles en la vista de derechos del definidor.
Por ejemplo, supongamos que existe la siguiente vista QualifiedStudentScores, que devuelve las puntuaciones de los estudiantes que califican para un curso. Los criterios para calificar se basan en el nivel y la puntuación del examen del estudiante. Si el nivel del estudiante es igual o inferior a seis, la puntuación es importante y el estudiante debe obtener al menos 50 puntos en el examen para calificar. De lo contrario, para los niveles iguales o superiores a seis, el estudiante califica de forma predeterminada.
CREATE VIEW QualifiedStudentScores SQL SECURITY DEFINER AS SELECT s.Name, s.Level, sc.Score FROM Students AS s JOIN Scores AS sc ON sc.StudentId = s.StudentId WHERE (CASE WHEN (s.Level < 6) OR (s.Level >= 6 AND sc.Score >= 50) THEN 'QUALIFIED'; ELSE 'FAILED'; END) = 'QUALIFIED';Un usuario puede ejecutar una consulta con el formato
SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;. Esta consulta puede fallar con un error de división por cero si hay un estudiante en el nivel 7 que obtuvo una puntuación de 20 puntos, aunque la vista limite los datos a 50 puntos y más para ese nivel.
Rendimiento de las consultas cuando se usan vistas
Una consulta que hace referencia a una vista tiene un rendimiento similar al de esa misma consulta con su referencia de vista reemplazada por la definición de la vista.
Cuotas y límites que se aplican a las vistas
En la página Cuotas y límites, se incluye información sobre las cuotas y los límites específicamente para las vistas.
Usar una vista en una consulta puede afectar la conformidad de esa consulta con los límites de consulta, ya que la definición de la vista se convierte en parte de la consulta.
Impacto en los costos
El uso de vistas tiene un impacto muy pequeño en el costo de una instancia:
El uso de vistas no afecta las necesidades de capacidad de procesamiento de una instancia, en comparación con la incorporación de su texto de consulta definido en las consultas que hacen referencia a ellas.
El uso de vistas tiene un impacto muy pequeño en el almacenamiento de la base de datos de una instancia, ya que la tabla que se genera cuando se ejecuta la definición de la consulta de una vista no se guarda en el almacenamiento persistente de la base de datos.
¿Qué sigue?
- Obtén información para crear y administrar vistas.