
Extracción de las Vistas en SQL Server
Extracción de Vistas en SQL Server, la administración de bases de datos no es solo cuestión de almacenar y recuperar datos de manera eficiente. También es fundamental garantizar que la información esté protegida y que solo las personas autorizadas puedan acceder a ella. Una de las formas más efectivas de controlar el acceso es a través de la gestión de vistas y el uso de comandos GRANT
en SQL Server. En este artículo, exploraremos cómo extraer vistas y conceder permisos de manera segura y eficiente.
¿Qué es una Vista en SQL Server?
Una vista es una consulta almacenada que proporciona una manera de ver y trabajar con los datos sin necesidad de interactuar directamente con las tablas subyacentes. Las vistas pueden simplificar las consultas complejas, proteger la información sensible y facilitar la administración de permisos.
Ejemplo de una Vista
Imaginemos que tenemos una tabla llamada empleados
con las columnas nombre
, salario
y departamento
. Podemos crear una vista para ver solo los nombres y departamentos de los empleados:
CREATE VIEW vista_empleados
AS
SELECT nombre, departamento
FROM empleados;
Extracción de las Vistas en SQL Server
A medida que nuestra base de datos crece, puede ser necesario listar todas las vistas creadas a partir de una fecha específica. Esto es útil para auditar cambios recientes o para asegurarse de que todas las vistas tengan los permisos adecuados.
Consulta para Extraer Vistas
El siguiente script permite extraer todas las vistas creadas después del 20 de septiembre de 2021, que no son vistas internas de Microsoft, y ordenarlas por fecha de creación de manera descendente:
SELECT *, 'GRANT VIEW DEFINITION ON [' + s.name + '].[' + o.name + '] TO [db_view]'
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE type = 'V' -- objeto vista
AND create_date > '2021-09-20' -- fecha aproximada a partir de cuando se crean las nuevas vistas
AND is_ms_shipped = 0 -- que NO son vistas internas de Microsoft
ORDER BY create_date DESC;
Este script no solo extrae la información de las vistas, sino que también genera el comando GRANT
correspondiente para otorgar permisos de definición de vista.

Otorgar Permisos con el Comando GRANT
En SQL Server, los permisos se gestionan mediante el uso del comando GRANT
. Este comando permite conceder varios tipos de permisos, como SELECT
, INSERT
, UPDATE
, DELETE
, y más. En el contexto de las vistas, uno de los permisos más relevantes es VIEW DEFINITION
.
¿Qué es VIEW DEFINITION
?
El permiso VIEW DEFINITION
permite a un usuario ver la definición de una vista, es decir, ver el código SQL que la compone. Esto es particularmente útil para desarrolladores y administradores que necesitan entender la estructura de las vistas sin modificar los datos subyacentes.
Ejemplo de Comando GRANT
Supongamos que queremos otorgar permisos de definición de vista a un usuario llamado db_view
para la vista vista_empleados
. El comando sería:
GRANT VIEW DEFINITION ON dbo.vista_empleados TO db_view;
Este comando es sencillo, pero cuando se tiene una base de datos con muchas vistas, automatizar la generación de estos comandos puede ahorrar mucho tiempo y reducir errores.
Automatización de la Gestión de Permisos
El script proporcionado al inicio genera automáticamente los comandos GRANT
para cada vista que cumple con los criterios especificados. Esto facilita enormemente la gestión de permisos, especialmente en entornos de desarrollo y pruebas donde las vistas pueden cambiar con frecuencia.
Ejemplo Completo
A continuación, se muestra un ejemplo completo que combina la extracción de vistas y la generación de comandos GRANT
:
SELECT *, 'GRANT VIEW DEFINITION ON [' + s.name + '].[' + o.name + '] TO [db_view]'
FROM sys.objects o
JOIN sys.schemas s ON o.schema_id = s.schema_id
WHERE type = 'V'
AND create_date > '2021-09-20'
AND is_ms_shipped = 0
ORDER BY create_date DESC;
Este script proporciona una lista de todas las vistas junto con los comandos necesarios para otorgar permisos. Solo necesita copiar y ejecutar los comandos generados.
object_id | name | schema_id | parent_object_id | type | type_desc | create_date | modify_date | is_ms_shipped | is_published | is_schema_published | schema_id | schema_name | GRANT_VIEW_COMMAND |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
545673010 | vista_ventas | 1 | 0 | V | VIEW | 2022-03-15 10:30:45 | 2022-03-15 10:30:45 | 0 | 0 | 0 | 1 | dbo | GRANT VIEW DEFINITION ON [dbo].[vista_ventas] TO [db_view] |
678945321 | vista_clientes | 1 | 0 | V | VIEW | 2022-01-10 14:20:22 | 2022-01-10 14:20:22 | 0 | 0 | 0 | 1 | dbo | GRANT VIEW DEFINITION ON [dbo].[vista_clientes] TO [db_view] |
784512369 | vista_productos | 1 | 0 | V | VIEW | 2021-11-05 09:15:33 | 2021-11-05 09:15:33 | 0 | 0 | 0 | 1 | dbo | GRANT VIEW DEFINITION ON [dbo].[vista_productos] TO [db_view] |
Descripción de los Campos
object_id
: Identificador único del objeto en la base de datos.name
: Nombre de la vista.schema_id
: Identificador del esquema al que pertenece la vista.parent_object_id
: Identificador del objeto padre (en el caso de las vistas, este valor suele ser 0).type
: Tipo de objeto (V
indica que es una vista).type_desc
: Descripción del tipo de objeto.create_date
: Fecha de creación de la vista.modify_date
: Fecha de última modificación de la vista.is_ms_shipped
: Indica si es una vista interna de Microsoft (0
significa que no lo es).is_published
: Indica si la vista está publicada.is_schema_published
: Indica si el esquema está publicado.schema_name
: Nombre del esquema al que pertenece la vista.GRANT_VIEW_COMMAND
: ComandoGRANT
generado automáticamente para otorgar permisos de definición de vista.
Resultado de la Extracción de las Vistas en SQL Server
Cada fila incluye una columna GRANT_VIEW_COMMAND
, que contiene el comando SQL necesario para otorgar permisos VIEW DEFINITION
a un usuario llamado db_view
para la vista correspondiente. Por ejemplo:
- Para la vista
vista_ventas
, el comando es:GRANT VIEW DEFINITION ON [dbo].[vista_ventas] TO [db_view];
Este enfoque automatiza la generación de comandos GRANT
, facilitando la tarea de administrar permisos en múltiples vistas dentro de una base de datos.
Beneficios de Usar Vistas y GRANT
en SQL Server
Seguridad
Las vistas permiten ocultar columnas sensibles y controlar el acceso a los datos. Al usar vistas, podemos asegurarnos de que los usuarios solo vean la información que necesitan.
Simplicidad
Las vistas simplifican las consultas complejas. En lugar de escribir consultas largas y complicadas, podemos crear una vista y referenciarla como si fuera una tabla.
Mantenimiento
Las vistas hacen que el mantenimiento de las bases de datos sea más manejable. Si la estructura subyacente de las tablas cambia, solo necesitamos actualizar la vista en lugar de cambiar todas las consultas que la utilizan.
Control de Accesos
El uso del comando GRANT
facilita la administración de permisos, asegurando que solo los usuarios autorizados puedan ver o modificar la definición de las vistas.
Conclusión
La gestión de vistas y permisos en SQL Server es una práctica esencial para mantener la seguridad y la eficiencia en la administración de bases de datos. Al automatizar la extracción de vistas y la generación de comandos GRANT
, podemos ahorrar tiempo, reducir errores y asegurarnos de que nuestras bases de datos estén bien protegidas.
Implementar estas prácticas en tu trabajo diario no solo mejorará la seguridad de tus datos, sino que también te ayudará a mantener un control más preciso sobre quién puede acceder y modificar la información en tu base de datos. ¡Empieza hoy mismo y optimiza la seguridad de tu SQL Server!
Eliminar usuarios huérfanos SQL server
Script para saber el histórico de queries ejecutados SQL
Script Creación de Roles en SQL Server