SQL Serverでは、ビューを最初に作成するときに暗号化することも、後で暗号化を含めるように変更することもできます。
T-SQLでビューを作成するには、CREATE VIEW
を使用します 構文。暗号化するには、WITH ENCRYPTION
を追加します 引数。
ALTER VIEW
を使用する場合は、同じ引数を使用して既存のビューを暗号化することもできます。 。
暗号化されたビューのテキストは、カタログビューに直接表示されません。したがって、システムテーブルまたはデータベースファイルにアクセスできないユーザーは、ビューの定義を表示できません。
WITH ENCRYPTION
を使用する また、SQLServerレプリケーションの一部としてビューが公開されるのを防ぎます。
例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メソッドに関係なく、同様の結果が得られます。
ビューをスクリプト化しようとすると、AzureDataStudioで表示されるエラーメッセージは次のとおりです。
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 Create」を使用して、定義が表示されたら、CREATE
を変更します。 ALTER
を使用 。
コマンドラインインターフェイスしかない場合は、sys.sql_modules
にクエリを実行できます。 (前の例のように)既存の定義を取得するためのビュー。次に、定義をコピーしてCREATE
を置き換えることができます ALTER
を使用 。
それが済んだら、WITH ENCRYPTION
を追加できます もう一度実行してください。
例3–複数の属性の追加
暗号化は、ビューの定義に含めることができるいくつかの属性の1つにすぎません。複数の属性を指定する必要がある場合は、コンマで区切ります。
たとえば、暗号化を使用する場合は スキーマバインディングを指定する場合は、これらをコンマ区切りのリストとして追加する必要があります。
ALTER VIEW dbo.v_Cats WITH ENCRYPTION, SCHEMABINDING AS SELECT CatId, CatName, Phone FROM dbo.Cats; GO