En SQL Server, puede cifrar una vista en el momento en que la crea por primera vez, o puede modificarla más tarde para incluir el cifrado.
Para crear una vista con T-SQL, usa CREATE VIEW
sintaxis. Para encriptarlo, agrega el WITH ENCRYPTION
argumento.
También puede usar el mismo argumento para cifrar una vista existente al usar ALTER VIEW
.
El texto de la vista cifrada no se ve directamente en ninguna vista de catálogo. Por lo tanto, la definición de la vista no puede ser vista por usuarios que no tengan acceso a las tablas del sistema o a los archivos de la base de datos.
Usando WITH ENCRYPTION
también evita que la vista se publique como parte de la replicación de SQL Server.
Ejemplo 1:crear una vista cifrada
Este es un ejemplo de cómo crear una vista cifrada.
CREATE VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
La parte para cifrarlo es WITH ENCRYPTION
. Simplemente podría eliminar ese argumento si no quisiera cifrarlo.
Después de crear esa vista, ahora cuando uso sys.sql_modules
vista de catálogo del sistema para ver su definición, obtengo NULL.
SELECT definition FROM sys.sql_modules WHERE object_id = OBJECT_ID('dbo.v_Cats');
Resultado:
+--------------+ | definition | |--------------| | NULL | +--------------+
Obtengo el mismo resultado con el (obsoleto) sys.syscomments
vista de catálogo.
SELECT text FROM sys.syscomments WHERE id = OBJECT_ID('v_Cats');
Resultado:
+--------+ | text | |--------| | NULL | +--------+
Obtengo un resultado similar, independientemente del método T-SQL que use para tratar de obtener la definición de la vista.
Y este es el mensaje de error que recibo en Azure Data Studio cuando intento crear un script para la vista:
No script was returned when scripting as Create on object View
Y recibiría un mensaje similar si intentara verlo en SSMS, DBeaver o cualquier otro software de administración de base de datos GUI.
Ejemplo 2:agregar cifrado a una vista existente
Si desea encriptar una vista existente, use ALTER VIEW
con la misma definición. En otras palabras, puedo tomar el primer ejemplo y reemplazar CREATE
con ALTER
.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO
Obviamente, esto supone que el resto de la definición de la vista es exactamente igual a la vista existente.
La forma más fácil de asegurarse de que está usando la misma definición es usar su herramienta GUI para crear un script de la vista existente usando la opción "Script as Alter", si existe. De lo contrario, podría usar "Script como Create", luego, cuando aparezca la definición, cambie CREATE
con ALTER
.
Si solo tiene una interfaz de línea de comandos, puede consultar sys.sql_modules
view para obtener la definición existente (como en el ejemplo anterior). Luego puede copiar la definición y reemplazar CREATE
con ALTER
.
Una vez que haya hecho eso, puede agregar WITH ENCRYPTION
y ejecutarlo de nuevo.
Ejemplo 3:agregar varios atributos
El cifrado es solo uno de varios atributos que puede incluir en la definición de su vista. Si necesita especificar varios atributos, sepárelos con una coma.
Por ejemplo, si desea utilizar el cifrado y desea especificar el enlace de esquema, entonces deberá agregarlos como una lista separada por comas.
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO