2013-11-26 2 views
0

Я хотел бы использовать пользовательские типы, которые могут быть созданы на сборке .NET, а затем импортированы на SQL Server для выполнения прозрачной операции, например, для шифрования. Шифрование будет обрабатываться в методе Parse во время дешифрования в методе ToString. Это будет изменение рабочей системы, поэтому я бы не хотел изменять код, который уже использует эти таблицы.Полностью прозрачные типы CLR в SQL Server

Учитывая У меня есть следующая таблица, где EncryptedString тип .NET:

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

можно затем вставить значения в эту таблицу, как это обычная строка столбец - существующий код может быть сохранен (метод Анализировать в .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

Это, вероятно, будут встроенные функции, которые были в sql-сервере с 2005 года. Http://technet.microsoft.com/en-us/library/ms179331(v=sql.90).aspx – dav1dsm1th

ответ

1

Есть несколько вариантов, по крайней мере, один из которых уже было сказано до сих пор:

  1. Создайте представление, которое вызывает соответствующий метод на CLR UDT (например, ToString()).
  2. Создать вычисленный (возможно PERSISTED) на столе, определение которой является вызов соответствующего метода (см выше)

Кроме того, я не думаю, что есть способ сказать «вызвать этот метод когда это значение обращается ».

Смежные вопросы