En este tema, 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, especifica la consulta en SQL que representa. Una vez que creaste una vista, puedes ejecutar consultas que hagan referencia a la vista 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 la consulta de referencia usa el contenido de esa tabla virtual.
Dado que la consulta que define una vista se ejecuta cada vez que una consulta que hace referencia a se ejecuta la vista, las vistas a veces se denominan 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 almacenamiento 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 para controlar el acceso de los usuarios a una vista.
Vistas de derechos del invocador | Vistas de derechos de definer | |
---|---|---|
Descripción | Si creas una vista con derechos de invocador, un rol de base de datos debe privilegios en la vista y todos los objetos de esquema a los que la vista para consultar la vista. Para obtener más información, consulta Vistas de derechos del llamador. | Si creas una vista con derechos de definidor, un rol de base de datos debe 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 agregará 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 consultarla. | Un rol de base de datos necesita privilegios para la vista (y solo la vista) para consultar la vista. |
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 modelos de datos lógicos a las aplicaciones.
A veces, las decisiones que tienen sentido para el modelado de datos físicos Spanner no es la mejor abstracción para la lectura de aplicaciones esos datos. Una vista puede presentar un esquema de tabla alternativo que sea un y la abstracción adecuada para las aplicaciones.
Visualiza las definiciones de consultas centralizadas y simplifican el mantenimiento.
Si creas vistas para consultas complejas o de uso general, puedes quitar el texto de las consultas de las aplicaciones y centralizarlo. Si lo haces, será más fácil mantener el texto de la consulta actualizada en todas las aplicaciones es mucho más simple y permite revisar y ajustar las sin la necesidad de que cambie 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 y se asegura de que los cambios que el esquema haga a los objetos (tablas, columnas, etc.) a los que la consulta hace referencia, no invaliden la consulta.
Casos de uso habituales
Usa vistas cuando tu base de datos de Spanner incluya datos con privilegios altos que no deban exponerse 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, 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 del 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 privilegios a menos usuarios 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 desees 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 Recursos Humanos, asociado de ventas).
- Datos específicos de la ubicación
Vistas de derechos del llamador
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 de definer
La vista de derechos del definidor agrega funciones de seguridad adicionales a la vista. Integra proporciona diferentes privilegios en la vista y los objetos del esquema subyacente. Al igual que ocurre con las vistas de derechos del invocador, los usuarios deben tener permisos a nivel de la base de datos para para crear vistas de derechos de definidor. La diferencia principal es que, cuando un rol de base de datos consulta la vista de derechos de un 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 de esquema, pueden acceder a la vista y ver su contenido. Derechos de quien define Las vistas permiten que los usuarios accedan a datos actualizados, limitados a las filas definidas en la vista.
Los permisos de Identity and Access Management (IAM) de Spanner se otorgan en
nivel de 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 agregará ningún control de acceso adicional. Esto se debe a que, si el usuario tiene permisos de lectura
en la base de datos, tienen permisos de lectura en todos los objetos de esquema de la
en la base de datos. Después de configurar el control de acceso detallado en tu base de datos,
usuarios de control de acceso detallados con el privilegio SELECT
en la vista y
los usuarios con permisos a nivel de base de datos en la base de datos pueden consultar la vista. El
diferencia es que el usuario de 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 que las hacen 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 declaraciones DML (
INSERT
,UPDATE
,DELETE
).La consulta que define una vista no puede usar parámetros de consulta.
Las vistas no se pueden indexar.
En las referencias a vistas, no se pueden usar sugerencias de tablas.
Sin embargo, la consulta que define una vista puede incluir sugerencias de tablas. a los que hace referencia.
La API de Read no admite vistas.
Las vistas de derechos del definidor no son compatibles con Spanner Data Boost.
Ejecutar una consulta que contenga una vista de derechos del definidor en Data Boost genera un error.
El modo de consulta recomendado para acceder a la vista de derechos de un definidor es el modo
NORMAL
.Los usuarios que no tienen acceso a los objetos de esquema subyacentes de la vista de derechos de un definidor reciben un error cuando realizan consultas en un modo de consulta que no es normal.
Es posible que un usuario cree una consulta elaborada cuidadosamente que provoca Spanner arroja un error que muestra o revela la existencia de los datos que no están disponibles en la vista de derechos del definidor.
Por ejemplo, supongamos que existe la siguiente vista QualifiedStudentScores, que muestra las puntuaciones de los estudiantes que califican para un curso. Los criterios de calificación se basan en el nivel y la calificació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 igual o mayor que 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 en forma de
SELECT * FROM QualifiedStudentScores s WHERE s.Level = 7 AND 1/(s.Score - 20) = 1;
Esta consulta podría fallar con un error de división por cero si hay un estudiante en nivel 7 que obtuvo una puntuación de 20 puntos, a pesar de que la vista limita 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 comparable a esa misma consulta con sus la 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 enumera la información de cuotas y límites específicamente para las vistas.
Usar una vista en una consulta puede afectar el cumplimiento de la consulta con límites de consulta porque la definición de la vista se vuelve 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 tiene ningún impacto en 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 base de datos de una instancia porque la tabla generada por la ejecución de la definición de consulta de una vista no se guardan en el almacenamiento persistente de la base de datos.
¿Qué sigue?
- Obtén más información para crear y administrar vistas.