sql >> Base de Datos >  >> RDS >> Sqlserver

Cómo cifrar una vista en SQL Server

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