2011-12-31 58 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