sql >> Database >  >> RDS >> Sqlserver

Een weergave coderen in SQL Server

In SQL Server kunt u een weergave versleutelen op het moment dat u deze voor het eerst maakt, of u kunt deze later wijzigen om versleuteling op te nemen.

Om een ​​weergave te maken met T-SQL, gebruik je de CREATE VIEW syntaxis. Om het te versleutelen, voeg je de WITH ENCRYPTION . toe argument.

U kunt hetzelfde argument ook gebruiken om een ​​bestaande weergave te versleutelen bij gebruik van ALTER VIEW .

De tekst van de versleutelde weergave is niet direct zichtbaar in catalogusweergaven. Daarom kan de definitie van de weergave niet worden bekeken door gebruikers die geen toegang hebben tot systeemtabellen of databasebestanden.

WITH ENCRYPTION gebruiken voorkomt ook dat de weergave wordt gepubliceerd als onderdeel van SQL Server-replicatie.

Voorbeeld 1 – Maak een versleutelde weergave

Hier is een voorbeeld van het maken van een versleutelde weergave.

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

Het deel om het te versleutelen is WITH ENCRYPTION . Ik zou dat argument gewoon kunnen verwijderen als ik het niet wilde versleutelen.

Na het maken van die weergave, nu wanneer ik de sys.sql_modules . gebruik systeemcatalogusweergave om de definitie ervan te bekijken, krijg ik NULL.

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

Resultaat:

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

Ik krijg hetzelfde resultaat met de (verouderde) sys.syscomments catalogusweergave.

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

Resultaat:

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

Ik krijg een soortgelijk resultaat, ongeacht welke T-SQL-methode ik gebruik om te proberen de definitie van de weergave te krijgen.

En hier is de foutmelding die ik krijg in Azure Data Studio wanneer ik de view probeer te scripten:

No script was returned when scripting as Create on object View

En ik zou een soortgelijk bericht krijgen als ik het probeerde te bekijken in SSMS, DBeaver of een andere GUI-databasebeheersoftware.

Voorbeeld 2 – Codering toevoegen aan een bestaande weergave

Als u een bestaande weergave wilt versleutelen, gebruikt u ALTER VIEW met dezelfde definitie. Met andere woorden, ik kan het eerste voorbeeld nemen en CREATE . vervangen met ALTER .

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

Dit veronderstelt uiteraard dat de rest van de definitie van de weergave exact hetzelfde is als de bestaande weergave.

De eenvoudigste manier om ervoor te zorgen dat u dezelfde definitie gebruikt, is door uw GUI-tool te gebruiken om de bestaande weergave te scripten met behulp van de optie "Script as Alter", als deze bestaat. Anders zou je "Script as Create" kunnen gebruiken, en als de definitie verschijnt, verander CREATE met ALTER .

Als u alleen een opdrachtregelinterface heeft, kunt u de sys.sql_modules opvragen bekijken om de bestaande definitie te krijgen (zoals in het vorige voorbeeld). U kunt dan de definitie kopiëren en CREATE vervangen met ALTER .

Zodra je dat hebt gedaan, kun je WITH ENCRYPTION . toevoegen en voer het opnieuw uit.

Voorbeeld 3 – Meerdere attributen toevoegen

Versleuteling is slechts een van de vele kenmerken die u kunt opnemen in de definitie van uw weergave. Als u meerdere kenmerken moet opgeven, scheidt u deze door een komma.

Als u bijvoorbeeld codering en . wilt gebruiken u schemabinding wilt specificeren, dan moet u deze toevoegen als een door komma's gescheiden lijst.

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

  1. SELECTEER IN met Oracle

  2. Slow bulk insert voor tafel met veel indexen

  3. Retourneer alleen numerieke waarden in MariaDB

  4. Hoe u ervoor kunt zorgen dat uw MySQL-database beveiligd is?