Descripción general de las vistas

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 esa VM el contenido de la tabla se utiliza en la consulta de referencia.

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 derechos del invocador o una vista de derechos de un definidor. Son los dos tipos de modelos de seguridad para controlar el acceso de los usuarios a una vista.

Vistas de derechos del invocadorVistas de derechos de definer
Descripción Si creas una vista con derechos de invocador, un rol de base de datos necesita 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 invocador. 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 detallado junto con la vista de derechos del definidor; de lo contrario, la vista de derechos de definidor no agrega ningún control de acceso adicional. Para para obtener más información, consulta Vistas de derechos de Definer.
Permisos necesarios para crear la vista Para crear, otorgar y revocar acceso a cualquiera de las vistas, debes tener acceso spanner.database.updateDdl.
Privilegios necesarios para consultar la vista Un rol de base de datos necesita privilegios para la vista de esquema para consultar la vista. 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 muchos beneficios en lugar de incluir las consultas que definen en el 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.

    Al crear vistas para consultas muy usadas o complejas, puedes factorizar el texto 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 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 la lógica de la aplicación, Spanner puede garantizar cambios de esquema en los objetos (tablas, columnas, etc.) a los que hace referencia la consulta. no invalides la consulta.

Casos de uso habituales

Usa vistas cuando tu base de datos de Spanner incluya una gran cantidad de privilegios datos que no deberían exponerse a todos los usuarios de la base de datos o si quieres para encapsular tus datos.

Si tu vista no necesita funcionalidad de seguridad adicional ni todos los invocadores de la vista tienen acceso a todos los objetos de esquema a los que hace referencia la vista, crean la vista de derechos de un invocador.

Si quieres crear una vista en la que no todos los invocadores tengan acceso a todo el esquema Los objetos a los que hace referencia la vista, crean una vista de derechos de un definidor. Definido vistas de derechos están mejor protegidas y tienen más restricciones porque el puede otorgar menos privilegios a los usuarios en las tablas y a las que se hace referencia en la vista. Las vistas de derechos de Definer son útiles cuando un usuario necesita una forma de acceder de forma segura a un subconjunto relevante de una instancia en la base de datos. Por ejemplo, puede que quieras crear una vista de derechos de un definidor para el los siguientes datos:

  • Datos de cuentas personales (p. ej., clientes de aplicaciones)
  • 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 de definer

La vista de derechos de un definidor agrega funcionalidad de seguridad adicional 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 principal diferencia es que cuando un rol de base de datos consulta la vista de derechos de un definidor, Spanner verifica que el rol tiene 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. Usar el control de acceso detallado junto con la vista de derechos del definidor; de lo contrario, esta no agregará cualquier 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 tablas reales que las hacen inapropiadas. 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 la que hace referencia.

  • Las vistas no son compatibles con Leer API.

  • Las vistas de derechos del definidor no son compatibles con Spanner Data Boost.

    Ejecutar una consulta que contenga la vista de derechos de un definidor en Data Boost dará como resultado 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 una interfaz de usuario vista de derechos reciben un error cuando se consulta en un modo de consulta diferente del normal.

  • Un usuario puede crear una consulta elaborada con cuidado que provoque 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 está la siguiente vista QualifiedStudentScores, que devuelve las puntuaciones de los estudiantes que reúnen los requisitos para un curso. Los criterios para la calificación se basa en el nivel y la calificación del examen del estudiante. Si el botón 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

  • La página Cuotas y página Límites, donde se detallan las cuotas y los límites específica 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 influye en las necesidades de capacidad de procesamiento de un en comparación con incorporar el texto de consulta definido en consultas que hacer referencia a ellos.

  • 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?