Colaboraciones en el Guille

Vista encriptadas y no encriptadas en Microsoft SQL Server

Fecha: 12/Oct/2005 (05/10/05)
Autor: Arbis Percy Reyes Paredes - bigpercynet@hotmail.com

                percy's blog              accede a toda la lista de mis artículos


dando la base acerca de la generación de vistas....

...extraída de la documentación de SQL Server....

Las vistas suelen utilizarse para centrar, simplificar y personalizar la percepción de la base de datos para cada usuario. Las vistas pueden emplearse como mecanismos de seguridad, que permiten a los usuarios obtener acceso a los datos por medio de la vista, pero no les conceden el permiso de obtener acceso directo a las tablas base subyacentes de la vista.

Una vista se puede considerar una tabla virtual o una consulta almacenada. Los datos accesibles a través de una vista no están almacenados en un objeto distinto de la base de datos. Lo que está almacenado en la base de datos es una instrucción SELECT. El resultado de la instrucción SELECT forma la tabla virtual que la vista devuelve. El usuario puede utilizar dicha tabla virtual haciendo referencia al nombre de la vista en instrucciones Transact-SQL, de la misma forma en que se hace referencia a las tablas. Las vistas se utilizan para alguna de estas funciones, o para todas:

  1. Restringir el acceso del usuario a filas concretas de una tabla. Por ejemplo, permitir que un empleado sólo vea las filas que guardan su trabajo en una tabla de seguimiento de actividad laboral. Restringir el acceso del usuario a columnas específicas. Por ejemplo, permitir que los empleados que no trabajen en el departamento de nóminas vean las columnas de nombre, oficina, teléfono y departamento de la tabla de empleados, pero no permitir que vean las columnas con los datos de salario u otra información personal.
  2. Combinar columnas de varias tablas de forma que parezcan una sola tabla.
  3. Agregar información en lugar de presentar los detalles. Por ejemplo, presentar la suma de una columna o el valor máximo o mínimo de una columna.

...."

AQUÍ EMPIEZA MI APORTACIÓN

Ejemplo:

Las vistas se crean definiendo la instrucción SELECT que recupera los datos presentados por la vista. Las tablas de datos a las que hace referencia la instrucción SELECT se conocen como las tablas base para la vista. En este ejemplo, viewCustomers viewCustomers de la base de datos northwind es una vista que selecciona las cinco clientes de la tabla Customers visualizando los siguientes campos: CustomerID, CompanyName, ContactName, Country, city, y además con la condición de que el nombre de la ciudad a la que pertenecen empiece con la letra M, ordenándolos por el campo companyname.

--creamos una nueva versión de la vista
create view viewCustomers
as
select top 5 CustomerID, CompanyName, ContactName, Country, city
from customers
where city like 'M%'
order by companyname

Una vez creada, se puede hacer referencia a viewCustomers en las instrucciones, de la misma forma que se hace referencia a una tabla:

 select * from viewCustomers  

VISTAS ENCRIPTADAS vs. VISTAS NO ENCRIPTADAS

Una vista no cifrada nos permite obtener información acerca de su definición debido a que es posible que necesite ver la definición de la vista para entender cómo derivan sus datos de las tablas de origen o para ver los datos que ella misma define. Una vista no encriptada es aquella cuya secuencia de comandos no ha sido encriptada, de modo que la columna VIEW_DEFINITION de la vista INFORMATION_SCHEMA.VIEWS expone legiblemente al usuario la T-SQL  que genera la vista. Para crear una vista no encriptada de manera predeterminada no se utiliza el atributo ENCRYPTION.

Por ejemplo, la siguiente secuencia de comandos muestra la manera de crear un vista de la tabla Customers de la base de datos Northwind (incluye las sentencias CREATE VIEW para generar la vista denominada viewCustomers y la sentencia SELECT necesaria para definir el conjunto de resultados de la vista). 

En este cuadro se detalla paso a paso todo este "rollo" de crear una vista no encriptada, como verá es sumamente sencilla.

--=================================================
 --VISTA NO ENCRIPTADA 
--================================================= 
use Northwind
go
--eliminamos la version anterior de una vista con nombre 'viewCustomers'
if exists(
          select table_name
          from information_schema.Views
          where  table_name='viewCustomers')

drop view viewCustomers
go

--creamos una nueva versión  de la vista
create view viewCustomers
as
select top 5 CustomerID, CompanyName, ContactName, Country, city
from customers
where city like 'M%'order by companyname
go

--mostramos la vista
select * from viewCustomers

--para verificar que es una vista no encriptada,
--mostramos la secuencia de comandos de la vista...
--notamos que es bastante legible...
select table_name, view_definition
from information_schema.Views
where table_name='viewCustomers'

Se dará; cuenta que no usamos el atributo ENCRYPTION, o en todo caso, no se usa la cláusula WITH ENCRYPTION. Podemos comprobar esto al momento de ejecutar la siguiente sentencia (explicada en el cuadro anterior):

select table_name, view_definition

from information_schema.Views

where table_name='viewCustomers'

Usted podrá observar de manera clara toda la sencuencia de comando que la generó.

En contraste, para generar una vista encriptada se usa la cláusula WITH ENCRYPTION que se encargará de encriptar la T-SQL de la vista. En este cuadro es explica a detalle todo el proceso de generación y consulta de la vista encriptada.

--=================================================
--VISTA  ENCRIPTADA
--=================================================
use Northwind
go
--eliminamos la version anterior de una vista con nombre 'viewCustomersEncrypted'
if exists(
          select table_name
          from information_schema.Views
          where  table_name='viewCustomersEncrypted')

drop view viewCustomers
go


--creamos una nueva versión  de la vista
create view  viewCustomersEncrypted with encryption
as
select top 5 CustomerID, CompanyName, ContactName, Country, city
from customers
where  city like 'M%'order by companyname
go

--mostramos la vista
select * from viewCustomersEncrypted
go

--para verificar que es una vista encriptada,
--mostramos la secuencia de comandos de la vista
--notamos que no es nada legible...
select table_name,view_definition
from information_schema.Views
where  table_name='viewcustomersEncrypted'

Pues ahora usted verá que el campo view_definition está encriptado, negándonos de esta manera leer la secuencia de comandos que define esta vista viewCustomersEncrypted.

Espero le haya sido de utilidad, mi intención es ayudar a entender mejor el tema.

Nos vemos.        

Percy Reyes
Microsoft Certified Professional

Saludos desde Trujillo - Perú

Por favor, califica este artículo en PanoramaBox, así me animarás a continuar colaborando contigo.


ir al índice principal del Guille