2012-07-04 63 views
1

我想在客戶端的服務器中使用刪除訪問執行查詢。如果我執行一個像這樣的查詢Update abc set col1=12 where id = 2他們會明白我們在做什麼。所以,我想進行加密和解密一些像這樣的方法:sql服務器中的加密查詢

在我們的服務器I加密這樣的查詢:

encrypt(Update abc set col1=12 where id = 2) 

所以我得到的輸出,如:

0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455D

然後我在客戶機上執行這樣的加密查詢:

decrypt(0x0100CF465B7B12625EF019E157120D58DD46569AC7BF4118455D12625EF019E157120D58DD46569AC7BF4118455D)

所以我們的客戶不能明白我們已經執行。

+0

有趣的想法,但有什麼問題嗎? –

+3

奇怪的要求是什麼,你的客戶對數據庫的訪問級別是什麼,你有什麼級別的訪問? – Jodrell

+4

如果您正在遠程運行,他們如何知道您正在做什麼,如果他們正在運行並使用SQL Profiler進行觀察,則這不會混淆任何事情。這隻會讓你看起來陰暗。 – Jodrell

回答

1

您可以創建這樣一個簡單的解密函數..

create proc exec_decrypt(@sql_str varbinary(8000)) 
as 
begin 
declare @qry varchar(8000); 
select @qry=cast(@sql_str as varchar(8000)); 
exec(@qry); 
end 

它接受一個字符串VARBINARY並將其轉換爲varchar,然後執行它..

您可以通過生成加密查詢下面

select CAST('UPDATE users set name =''alex''' as varbinary(8000)) 

satament然後通過使上述查詢的輸出作爲該過程的參數,執行在客戶機代替PROC exec_decrypt ..

Ex: exec_decrypt 0x55504441544520757365727320736574206E616D65203D27616C657827 

希望這會爲你工作。請注意,客戶不應該對 PROC exec_decrypt任何許可

+2

「請注意,客戶端不應該對proc exec_decrypt擁有任何權限」。更不用說StackOverflow ;-) – vstrien

+0

@joe G Joseph你已經顯示的過程很好。但是我們不能增加varbinary的長度嗎? – hims056

+0

如果需要,您可以使用varbinary(MAX)。 varbinary(8000)綽綽有餘正常查詢 –