Sql server NewID()-是否很有可能公开上一个/下一个GUI
我知道guid在理论上是独一无二的,碰撞的可能性很低。然而,如果我理解正确,一些唯一性是可用的,因为它是根据计算机上的信息播种的,根据使用的算法生成 给定GUID,用户猜测表中其他GUID的可能性有多大 例如,如果您的新闻稿订户具有取消订阅功能,您可以将其发布到example.com/subscriber/unsubscribe/{id} 对于整数标识,这显然是个坏主意。ID为1000的用户可以通过猜测ID在几秒钟内取消订阅整个数据库Sql server NewID()-是否很有可能公开上一个/下一个GUI,sql-server,guid,newid,Sql Server,Guid,Newid,我知道guid在理论上是独一无二的,碰撞的可能性很低。然而,如果我理解正确,一些唯一性是可用的,因为它是根据计算机上的信息播种的,根据使用的算法生成 给定GUID,用户猜测表中其他GUID的可能性有多大 例如,如果您的新闻稿订户具有取消订阅功能,您可以将其发布到example.com/subscriber/unsubscribe/{id} 对于整数标识,这显然是个坏主意。ID为1000的用户可以通过猜测ID在几秒钟内取消订阅整个数据库 如果ID列是一个初始化为newid()的GUID,那么如果您
如果ID列是一个初始化为newid()的GUID,那么如果您的用户知道正确的ID,他们猜测正确ID的可能性有多大?我想说,理论上可能是这样,但实际上不太可能发生 我已经阅读了Eric Lippert的博客帖子,这些帖子与他的评论中的链接不谋而合,还有一些关于堆栈溢出的其他答案:
如果(并且只有当)这真的是可能的,您可能需要一台快速的机器和关于用于创建guid的算法的深入知识 最后,您必须查看上下文:
即使可以猜测GUID(我不确定是否是-我确定我不能这么做),我也无法想象有人会真的这样做,以便从您的新闻稿中取消订阅其他人。NEWID()生成一个版本4 GUID,但它的实现是可猜测的 根据RFC 4122规范: 安全注意事项 不要认为UUID很难猜测;它们不应该被使用 作为安全功能(仅拥有权限即可授予的标识符
访问),例如。可预测的随机数源将
使局势恶化 正如@martin smith指出的,仅仅因为它是版本4,并不意味着它本质上是可以猜测的,它取决于实现。演示如何使用不可猜测的SQL创建投诉版本4 GUID:
SELECT CAST(CRYPT_GEN_RANDOM(16) AS UNIQUEIDENTIFIER)
参考文献: