Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment chiffrer une vue dans SQL Server

Dans SQL Server, vous pouvez chiffrer une vue au moment où vous la créez pour la première fois, ou vous pouvez la modifier ultérieurement pour inclure le chiffrement.

Pour créer une vue avec T-SQL, vous utilisez le CREATE VIEW syntaxe. Pour le chiffrer, vous ajoutez le WITH ENCRYPTION arguments.

Vous pouvez également utiliser le même argument pour chiffrer une vue existante lors de l'utilisation de ALTER VIEW .

Le texte de la vue chiffrée n'est directement visible dans aucune vue du catalogue. Par conséquent, la définition de la vue ne peut pas être visualisée par les utilisateurs qui n'ont pas accès aux tables système ou aux fichiers de base de données.

Utilisation de WITH ENCRYPTION empêche également la publication de la vue dans le cadre de la réplication SQL Server.

Exemple 1 - Créer une vue chiffrée

Voici un exemple de création d'une vue chiffrée.

CREATE VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

La partie pour le crypter est WITH ENCRYPTION . Je pourrais simplement supprimer cet argument si je ne voulais pas le chiffrer.

Après avoir créé cette vue, maintenant quand j'utilise le sys.sql_modules vue du catalogue système pour voir sa définition, j'obtiens NULL.

SELECT definition 
FROM sys.sql_modules
WHERE object_id = OBJECT_ID('dbo.v_Cats');

Résultat :

+--------------+
| definition   |
|--------------|
| NULL         |
+--------------+

J'obtiens le même résultat avec les sys.syscomments (obsolètes) vue du catalogue.

SELECT text
FROM sys.syscomments
WHERE id = OBJECT_ID('v_Cats');

Résultat :

+--------+
| text   |
|--------|
| NULL   |
+--------+

J'obtiens un résultat similaire, quelle que soit la méthode T-SQL que j'utilise pour essayer d'obtenir la définition de la vue.

Et voici le message d'erreur que j'obtiens dans Azure Data Studio lorsque j'essaie de scripter la vue :

No script was returned when scripting as Create on object View

Et j'obtiendrais un message similaire si j'essayais de l'afficher dans SSMS, DBeaver ou tout autre logiciel de gestion de base de données GUI.

Exemple 2 – Ajouter un chiffrement à une vue existante

Si vous souhaitez chiffrer une vue existante, utilisez ALTER VIEW avec la même définition. En d'autres termes, je peux prendre le premier exemple et remplacer CREATE avec ALTER .

ALTER VIEW dbo.v_Cats
WITH ENCRYPTION
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO

Cela suppose évidemment que le reste de la définition de la vue est exactement la même que la vue existante.

Le moyen le plus simple de vous assurer que vous utilisez la même définition consiste à utiliser votre outil graphique pour créer un script de la vue existante à l'aide de l'option "Script as Alter", si elle existe. Sinon, vous pouvez utiliser "Script as Create", puis lorsque la définition apparaît, modifiez CREATE avec ALTER .

Si vous n'avez qu'une interface de ligne de commande, vous pouvez interroger le sys.sql_modules view pour obtenir la définition existante (comme dans l'exemple précédent). Vous pouvez ensuite copier la définition et remplacer CREATE avec ALTER .

Une fois que vous avez fait cela, vous pouvez ajouter WITH ENCRYPTION et relancez-le.

Exemple 3 – Ajout de plusieurs attributs

Le chiffrement n'est qu'un des nombreux attributs que vous pouvez inclure dans la définition de votre vue. Si vous devez spécifier plusieurs attributs, séparez-les par une virgule.

Par exemple, si vous souhaitez utiliser le chiffrement et vous souhaitez spécifier la liaison de schéma, vous devez alors les ajouter sous forme de liste séparée par des virgules.

ALTER VIEW dbo.v_Cats
WITH ENCRYPTION, SCHEMABINDING
AS
    SELECT 
        CatId,
        CatName,
        Phone
    FROM dbo.Cats;
GO