2013-11-26 38 views
0

我想利用可以在.NET程序集中創建的用戶定義類型,然後將其導入SQL Server以執行透明操作,例如加密。加密將在Parse方法中處理,而在ToString方法中解密。這將改變工作系統,所以我不想修改已經使用這些表的代碼。SQL Server中完全透明的CLR類型

鑑於我有一個在下表中,其中EncryptedString是.NET類型:

CREATE TABLE dbo.EncryptedStrings 
(ID int IDENTITY(1,1) PRIMARY KEY, EncryptedStringValue EncryptedString) 

我然後可以將值插入該表,就像是一個正常的字符串列 - 現有的代碼可以保持(Parse方法然後在.NET代碼中執行 - 在我的情況下執行加密)。

INSERT INTO dbo.EncryptedStrings (EncryptedStringValue) VALUES ('AAA'); 
INSERT INTO dbo.EncryptedStrings (EncryptedStringValue) VALUES ('BBB'); 

但是,當我做了一個簡單SELECT

SELECT * FROM dbo.EncryptedStrings 

然後我收到的二進制序列化表示形式,如:

enter image description here

我需要顯式調用的ToString或CAST它到VARCHAR使ToString被執行:

SELECT ID, EncryptedStringValue.ToString() FROM EncryptedStrings 

enter image description here

有什麼辦法來配置服務器,使其始終顯示的ToString表示,和下面的SELECT查詢總是返回相同的結果?

SELECT ID, EncryptedStringValue FROM dbo.EncryptedStrings 
SELECT ID, EncryptedStringValue.ToString() FROM EncryptedStrings 
+0

你說加密是你想要做的一個例子*。爲了加密,爲什麼沒有足夠的透明數據加密設施。除了加密之外,對於所有查詢目的,使用此CLR類型的好處似乎只是類似於「varchar」? –

+0

@Damien_The_Unbeliever我希望它看起來像varchar,但執行我的邏輯插入和查詢。你指的是什麼內置的透明加密設施? – nan

+0

這些可能是自2005年以來一直在sql-server中的內置函數http://technet.microsoft.com/en-us/library/ms179331(v=sql.90).aspx – dav1dsm1th

回答

1

有幾個選擇,其中至少一個的迄今已提到:

  1. 創建調用在CLR UDT適當的方法的視圖(例如,的ToString())。
  2. 創建一個計算上,其定義是,以適當的方法調用表(可能是持久性)(見上文)

除此之外,我不認爲有一種方式來表達「調用此方法每當這個值被訪問「。