sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan krypteres en visning i SQL Server

I SQL Server kan du kryptere en visning på det tidspunkt, du først opretter den, eller du kan ændre den senere for at inkludere kryptering.

For at oprette en visning med T-SQL, bruger du CREATE VIEW syntaks. For at kryptere det, tilføjer du WITH ENCRYPTION argument.

Du kan også bruge det samme argument til at kryptere en eksisterende visning, når du bruger ALTER VIEW .

Den krypterede visnings tekst er ikke direkte synlig i nogen katalogvisninger. Derfor kan visningens definition ikke ses af brugere, der ikke har adgang til systemtabeller eller databasefiler.

Brug af WITH ENCRYPTION forhindrer også visningen i at blive publiceret som en del af SQL Server-replikering.

Eksempel 1 – Opret en krypteret visning

Her er et eksempel på oprettelse af en krypteret visning.

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

Delen til at kryptere den er WITH ENCRYPTION . Jeg kunne simpelthen fjerne det argument, hvis jeg ikke ville kryptere det.

Efter at have oprettet den visning, nu når jeg bruger sys.sql_modules systemkatalogvisning for at se dens definition, får jeg NULL.

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

Resultat:

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

Jeg får det samme resultat med de (forældede) sys.syscomments katalogvisning.

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

Resultat:

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

Jeg får et lignende resultat, uanset hvilken T-SQL-metode jeg bruger til at forsøge at få visningens definition.

Og her er fejlmeddelelsen, jeg får i Azure Data Studio, når jeg prøver at scripte visningen:

No script was returned when scripting as Create on object View

Og jeg ville få en lignende besked, hvis jeg prøvede at se den i SSMS, DBeaver eller enhver anden GUI-databasestyringssoftware.

Eksempel 2 – Tilføj kryptering til en eksisterende visning

Hvis du vil kryptere en eksisterende visning, skal du bruge ALTER VIEW med samme definition. Med andre ord kan jeg tage det første eksempel og erstatte CREATE med ALTER .

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

Dette forudsætter naturligvis, at resten af ​​synspunktets definition er nøjagtig den samme som den eksisterende opfattelse.

Den nemmeste måde at sikre, at du bruger den samme definition på, er at bruge dit GUI-værktøj til at scripte den eksisterende visning ved hjælp af "Script as Alter", hvis den findes. Ellers kan du bruge "Script som Opret", og derefter ændre CREATE, når definitionen vises med ALTER .

Hvis du kun har en kommandolinjegrænseflade, kan du forespørge på sys.sql_modules view for at få den eksisterende definition (som i det foregående eksempel). Du kan derefter kopiere definitionen og erstatte CREATE med ALTER .

Når du har gjort det, kan du tilføje WITH ENCRYPTION og kør det igen.

Eksempel 3 – Tilføjelse af flere attributter

Kryptering er blot en af ​​flere attributter, du kan inkludere i din visnings definition. Hvis du har brug for at angive flere attributter, skal du adskille dem med et komma.

For eksempel, hvis du vil bruge kryptering og du vil angive skemabinding, så skal du tilføje disse som en kommasepareret liste.

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

  1. Opbygning af en kommasepareret liste over værdier i en Oracle SQL-sætning

  2. Hvordan skal jeg gemme GUID i MySQL-tabeller?

  3. Hvordan får du førende jokertegn-fuldtekstsøgninger til at fungere i SQL Server?

  4. Sådan opretter du forbindelse til SQL-serverdatabase fra en Windows 10 UWP-app