2011-12-31 61 views
2

我通過WCF公開了Sql Server數據以供WP7應用程序使用。現在我有一個選擇,要麼我使用主鍵或其他列使用同一個表的數據。通過WCF公開SQL Server主鍵

我個人認爲最好不要暴露PK,不是說手機不安全,而是因爲互聯網。但是,請指教我。

感謝,

回答

0

我認爲你提到的PK是int類型的,它不會是安全暴露值。

在這種情況下,我會添加一個類型GUID(SQL Server中的uniqueidentifier)的替代鍵。可以使用.Net代碼中的System.Guid.NewGuid()方法或使用SQL中的newid()函數填充該字段。

這將使關鍵不可預測。例如,如果一個人嗅探你的WCF流量,並看到一個值爲4的PK,他們可以嘗試關閉值(2,3,5 ...)來訪問其他記錄。 GUID不是順序的,所以很難猜測其他關鍵值。


請注意,GUID的佔用比int(或2x BIGINT)4倍以上的存儲空間,因此,如果這將是一個大表,該GUID的方法可能需要相當多的空間。

在這種情況下,您可能會重新考慮暴露密鑰是否真的是安全問題;如果應用的設計是安全的,或者如果所有記錄都是要被任何人查看的話,暴露PK值不應該那麼差。

畢竟,如果你看看這個頁面的URL,你會注意到值8690786,它很可能是一個暴露的問題整數標識符。

+0

你能指點我的網頁,顯示如何在SQL Management Studio中實現GUID嗎? – darking050 2012-01-01 09:21:01

+0

以下是MSDN頁面:http://msdn.microsoft.com/en-us/library/ms187942.aspx(_GUIDs_在SQL Server中稱爲_uniqueidentifier_)。聲明_uniqueidentifier_類型的列並確保通過我在答案中提供的兩種方法之一填充它。 – GolfWolf 2012-01-01 10:27:41

+0

謝謝。小問題,在C#中的字符串類型的變量會適合它嗎? – darking050 2012-01-04 07:46:34