2010-10-22 35 views
2

我正在使用SQL Sever的NEWID()生成一个API密钥的小块。该密钥将用于访问我们网络应用程序的某些部分,并将通过URL传递。当创建新的API使用者时(在Stored Proc中),将生成密钥。关键是每个消费者都是独一无二的。尽管最初的消费者数量预计会相对较低,但会随着时间的推移而增长,但频率相对较低。有关使用NEWID()作为API密钥的任何问题?

一些约束是:

  • 主要有在插入层面上产生
  • 必须为每个消费者
  • 性能独特,一如既往,是很重要的


这种方法有什么问题 - 安全性,性能或其他?有没有更好的方法来达到相同的结果?

+1

没有我能看到的问题。 – 2010-10-22 20:15:51

+0

谢谢大家。看起来我可能会“过度思考”这个问题。 – 2010-10-23 08:29:01

回答

1

这应该没有问题。 NEWID()会生成一个GUID,保证在您的系统上唯一。

你不应该使用NEWSEQUENTIALID(),因为它可以很容易猜到,如here,但在NEWID()的文档中没有给出警告,所以我会认为它没有同样的问题。这意味着不应该存在安全问题。

至于性能,密钥的初始生成可能需要比其他一些方法更长的时间,但保证的唯一性弥补了这一点。如果您为列索引,查找也应该很快。

+0

MSDN通常不完整;我也不希望任何输出不能用作安全密钥的函数来提及这个事实。 – EFraim 2010-11-25 13:54:30

0

我这样做没有任何问题。 INSERT是一个相对昂贵的操作,NEWID()的开销是比较微不足道的。