Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak zaszyfrować widok w SQL Server

W SQL Server możesz zaszyfrować widok podczas tworzenia go po raz pierwszy lub możesz go później zmienić, aby uwzględnić szyfrowanie.

Aby utworzyć widok za pomocą T-SQL, użyj CREATE VIEW składnia. Aby go zaszyfrować, dodaj WITH ENCRYPTION argument.

Możesz również użyć tego samego argumentu do zaszyfrowania istniejącego widoku podczas korzystania z ALTER VIEW .

Tekst zaszyfrowanego widoku nie jest bezpośrednio widoczny w żadnych widokach katalogu. Dlatego definicja widoku nie może być wyświetlana przez użytkowników, którzy nie mają dostępu do tabel systemowych ani plików baz danych.

Używanie WITH ENCRYPTION zapobiega również publikowaniu widoku jako części replikacji SQL Server.

Przykład 1 – Tworzenie zaszyfrowanego widoku

Oto przykład tworzenia zaszyfrowanego widoku.

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

Część do zaszyfrowania to WITH ENCRYPTION . Mógłbym po prostu usunąć ten argument, gdybym nie chciał go zaszyfrować.

Po utworzeniu tego widoku, teraz kiedy używam sys.sql_modules widok katalogu systemowego, aby wyświetlić jego definicję, otrzymuję NULL.

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

Wynik:

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

Otrzymuję ten sam wynik z (przestarzałym) sys.syscomments widok katalogu.

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

Wynik:

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

Otrzymuję podobny wynik, niezależnie od metody T-SQL, której używam, aby uzyskać definicję widoku.

A oto komunikat o błędzie, który pojawia się w Azure Data Studio, gdy próbuję skryptować widok:

No script was returned when scripting as Create on object View

Otrzymałbym podobny komunikat, gdybym spróbował wyświetlić go w SSMS, DBeaver lub innym oprogramowaniu do zarządzania bazą danych GUI.

Przykład 2 – Dodaj szyfrowanie do istniejącego widoku

Jeśli chcesz zaszyfrować istniejący widok, użyj ALTER VIEW z tą samą definicją. Innymi słowy, mogę wziąć pierwszy przykład i zastąpić CREATE z ALTER .

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

To oczywiście zakłada, że ​​reszta definicji widoku jest dokładnie taka sama, jak istniejący widok.

Najprostszym sposobem na upewnienie się, że używasz tej samej definicji, jest użycie narzędzia GUI do skryptowania istniejącego widoku za pomocą opcji „Skrypt jako zmiana”, jeśli istnieje. W przeciwnym razie możesz użyć „Skrypt jako Utwórz”, a gdy pojawi się definicja, zmień CREATE z ALTER .

Jeśli masz tylko interfejs wiersza poleceń, możesz wysłać zapytanie do sys.sql_modules widok, aby uzyskać istniejącą definicję (jak w poprzednim przykładzie). Następnie możesz skopiować definicję i zastąpić CREATE z ALTER .

Gdy to zrobisz, możesz dodać WITH ENCRYPTION i uruchom go ponownie.

Przykład 3 – Dodawanie wielu atrybutów

Szyfrowanie to tylko jeden z kilku atrybutów, które możesz uwzględnić w definicji widoku. Jeśli musisz określić wiele atrybutów, oddziel je przecinkami.

Na przykład, jeśli chcesz używać szyfrowania i chcesz określić powiązanie schematu, musisz dodać je jako listę oddzieloną przecinkami.

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. Co to jest CZAS STATYSTYKI w SQL Server?

  2. Używanie zmiennej w zapytaniu OPENROWSET

  3. Zwróć listę wszystkich wyzwalaczy serwera w SQL Server

  4. Alternatywy SQL Server Management Studio do przeglądania/edycji tabel i uruchamiania zapytań

  5. Korzystanie z wyszukiwania pełnotekstowego w SQL Server 2008 w wielu tabelach, kolumnach