Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да шифровате изглед в SQL Server

В SQL Server можете да шифровате изглед в момента, в който го създадете за първи път, или можете да го промените по-късно, за да включите криптиране.

За да създадете изглед с T-SQL, използвате CREATE VIEW синтаксис. За да го шифровате, добавяте WITH ENCRYPTION аргумент.

Можете също да използвате същия аргумент за шифроване на съществуващ изглед, когато използвате ALTER VIEW .

Текстът на криптирания изглед не се вижда директно в нито един изглед на каталог. Следователно дефиницията на изгледа не може да бъде видяна от потребители, които нямат достъп до системни таблици или файлове на базата данни.

Използване на WITH ENCRYPTION също така предотвратява публикуването на изгледа като част от репликацията на SQL Server.

Пример 1 – Създайте шифрован изглед

Ето пример за създаване на шифрован изглед.

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

Частта за криптирането му е WITH ENCRYPTION . Бих могъл просто да премахна този аргумент, ако не искам да го криптирам.

След като създадох този изглед, сега, когато използвам sys.sql_modules изглед на системния каталог, за да видите неговата дефиниция, получавам NULL.

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

Резултат:

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

Получавам същия резултат с (оттеглените) sys.syscomments изглед на каталог.

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

Резултат:

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

Получавам подобен резултат, независимо кой метод на T-SQL използвам, за да се опитам да получа дефиницията на изгледа.

И ето съобщението за грешка, което получавам в Azure Data Studio, когато се опитам да скриптира изгледа:

No script was returned when scripting as Create on object View

И бих получил подобно съобщение, ако се опитам да го видя в SSMS, DBeaver или друг софтуер за управление на база данни с GUI.

Пример 2 – Добавете криптиране към съществуващ изглед

Ако искате да шифровате съществуващ изглед, използвайте ALTER VIEW със същото определение. С други думи, мога да взема първия пример и да заменя CREATE с ALTER .

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

Това очевидно предполага, че останалата част от дефиницията на изгледа е точно същата като съществуващия изглед.

Най-лесният начин да се уверите, че използвате една и съща дефиниция, е да използвате вашия GUI инструмент, за да скриптирате съществуващия изглед, като използвате опцията „Script as Alter“, ако съществува. В противен случай можете да използвате „Script as Create“, след което, когато се появи дефиницията, променете CREATE с ALTER .

Ако имате само интерфейс на командния ред, можете да потърсите sys.sql_modules преглед, за да получите съществуващата дефиниция (както в предишния пример). След това можете да копирате дефиницията и да замените CREATE с ALTER .

След като направите това, можете да добавите WITH ENCRYPTION и го стартирайте отново.

Пример 3 – Добавяне на множество атрибути

Шифроването е само един от няколкото атрибута, които можете да включите в определението на изгледа си. Ако трябва да посочите няколко атрибута, разделете ги със запетая.

Например, ако искате да използвате криптиране и искате да зададете обвързване на схемата, тогава ще трябва да ги добавите като списък, разделен със запетая.

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. T-SQL условна поръчка по

  2. Има ли булев тип данни в Microsoft SQL Server, какъвто има в MySQL?

  3. Как да получа списък с всички таблици в база данни с помощта на TSQL?

  4. Работа с данни на Salesforce.com в SQL Server Reporting Services

  5. 3 начина да получите типа данни на колона в SQL Server (T-SQL)