我正在研究一小部分,它将使用 SQL Sever 的 NEWID() 生成 API 密钥。密钥将用于访问我们网络应用程序的某些部分,并将通过 URL 传递。创建新的 API 使用者时(在存储过程中)生成密钥。每个消费者的密钥都是唯一的。虽然最初的消费者数量预计会相对较低,但随着时间的推移会增加,但频率相对较低。
一些限制是:
- 必须在插入级别生成密钥
- 每个消费者必须是唯一的
- 一如既往,性能很重要
这种方法是否存在任何问题 - 安全性、性能或其他?有没有更好的方法来达到相同的结果?
我正在研究一小部分,它将使用 SQL Sever 的 NEWID() 生成 API 密钥。密钥将用于访问我们网络应用程序的某些部分,并将通过 URL 传递。创建新的 API 使用者时(在存储过程中)生成密钥。每个消费者的密钥都是唯一的。虽然最初的消费者数量预计会相对较低,但随着时间的推移会增加,但频率相对较低。
一些限制是:
这种方法是否存在任何问题 - 安全性、性能或其他?有没有更好的方法来达到相同的结果?
这应该没有问题。 NEWID()
生成一个保证在您的系统上唯一的 GUID。
您不应该使用 NEWSEQUENTIALID() 因为它很容易被猜到,如此处所述,但 NEWID() 的文档中没有给出警告,所以我认为它没有同样的问题。这意味着不应该存在安全问题。
至于性能,密钥的初始生成可能比其他一些方法花费更长的时间,但保证的唯一性弥补了这一点。如果您为列编制索引,查找也应该很快。
我已经这样做了,没有任何问题。INSERT
是一个相对昂贵的操作,的开销NEWID()
是相对微不足道的。