2012-06-12 51 views
2

我有2個存儲過程Encode,Decode,我想用這個sp將我的datetime列值(比如Dob)轉換爲加密日期。 問題是加密格式不在日期時間(varbinary),因此它不能被插入到該字段。改變數據類型或添加一個新的列不贊成我,因爲我的數據庫是一個巨大的,有很多表和sps.我現在使用的步驟是:加密mysql服務器中的日期時間字段

declare @datetime 
set @datetime='01/02/2008 12:45 PM' 
declare @secretDate varchar(400) 
declare @date varchar(200) 
set @date=(select Convert(varchar(200),@datetime,120) 
EXEC @secretDate=dbo.Encode @date 
set @date=(select Convert(varchar(200),@secretdate,120)) 
select Convert(varchar(200),convert(varbinary(MAX),@date)) as EncryptedDate 

任何建議表示讚賞!

回答

2

您將不得不在多個步驟中更改列定義。

1)添加一個新的encryptedDate列設置爲編碼值。

2)從表中刪除現有的日期列。

3)將encryptedDate重命名爲現有的日期列名稱。

您可以在一個命令中執行步驟2 + 3,但我不確定語法。

任何建議表示讚賞!

這整個事情聽起來像一個壞主意。如果數據已加密,但「解碼」功能是DB中的存儲過程,則數據實際上不會被加密。這樣做也可以防止所有的數據比較工作,這是一件壞事。

爲什麼不從數據庫中讀取數據時只是對數據進行編碼?如果您不想將其呈現給用戶?

0

時間,特別是日期有一個非常不尋常的,非線性結構。即使將日期存儲在用於日期的結構中也很困難。如果您需要存儲加密的數據,請勿嘗試將其存儲在日期/日期時間字段中。

相關問題