2009-08-07 49 views
0

目前我正在使用sql加密並希望通過Linq繼續使用它。爲了處理通過sql的加密/解密,我將所有CRUD存儲過程創建並連接到模型中的表格。MVC使用Linq to Entity w/sql加密

主要問題是我的數據庫模型看到的是用於sql加密存儲的varbinary(max)的字段類型。

問題:

A.配置實體模型 - 不能加密表的VARBINARY字段分配給CRUD存儲過程的參數,這是varchar類型。存儲的proc採用varchar值,對其進行加密,然後將其存儲在加密的表varbinary字段中。

B.創建實體模型之外 - 引用加密實體表時,它期望varbinary字段,實際上它實際上是一個varchar字段。這會在嘗試將值分配給該加密字段時導致覆蓋問題。

如何解決這個問題。我需要該應用程序將其視爲解密,就像它從我存儲的proc中返回時一樣。然後,CUD語句將採用字符串值,並且實體模型中存儲的proc與它們綁定在一起進行加密。

在此先感謝。

+0

Duplicate:http://stackoverflow.com/questions/1244486/mvc-using-linq-to-entity-w-sql-encryption/1244514#1244514 – 2009-08-07 14:40:00

回答

1

有2種技術「Linq to SQL」和「Entity Framework」。

實體框架期望存儲的proc和表列的簽名匹配。

有兩種方法可以解決這個問題。

  • 您可以將虛擬varbinary字段添加到存儲的proc和一個varchar字段中。這可以讓所有事情都得到預期的結果,你只需要忽略不需要的領域。
  • 在不使用表的情況下執行存儲過程(在EF中執行存儲過程的方法不同)。然後你避免了不匹配的問題
+0

感謝您的快速回復。我星期五工作嘗試和實施您的建議,似乎一切工作正常。非常感謝! 我已經發布了另一個相關的問題,如果你的話題,如果你有時間: http://stackoverflow.com/questions/1254722 – 2009-08-10 13:01:07

2

我們最近在那個環境中做了這個。這不是一個非常簡單的解決方案。

我可以找到沒有辦法讓實體處理SQL加密。這是我做的。

將表格帶入實體設計器。
變化表中的字段爲varchar
創建一個返回所有這些領域的一個存儲過程,與加密字段解碼爲字符串
在實體映射,導入存儲過程
更改存儲過程返回表
創建另一個存儲過程來更新這些字段(或整個表,你的選擇)
更改表不更新或從數據庫中讀取加密領域(這使您可以仍使用該對象的其他事情。

另外,你可以改變你的實體對象,只是不包含這些字段,一個d具有通過sproc特別訪問的值。

+0

感謝您的快速回復。我採用了第一種解決方案,但我相信你們的工作也是如此。無論如何謝謝你! 如果您有時間,我已經發布了與此主題相關的其他問題。好像你也會遇到同樣的問題。 http://stackoverflow.com/questions/1254722 – 2009-08-10 13:03:07