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
然後我收到的二進制序列化表示形式,如:
我需要顯式調用的ToString或CAST
它到VARCHAR
使ToString被執行:
SELECT ID, EncryptedStringValue.ToString() FROM EncryptedStrings
有什麼辦法來配置服務器,使其始終顯示的ToString表示,和下面的SELECT查詢總是返回相同的結果?
SELECT ID, EncryptedStringValue FROM dbo.EncryptedStrings
SELECT ID, EncryptedStringValue.ToString() FROM EncryptedStrings
你說加密是你想要做的一個例子*。爲了加密,爲什麼沒有足夠的透明數據加密設施。除了加密之外,對於所有查詢目的,使用此CLR類型的好處似乎只是類似於「varchar」? –
@Damien_The_Unbeliever我希望它看起來像varchar,但執行我的邏輯插入和查詢。你指的是什麼內置的透明加密設施? – nan
這些可能是自2005年以來一直在sql-server中的內置函數http://technet.microsoft.com/en-us/library/ms179331(v=sql.90).aspx – dav1dsm1th