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