记录T-SQL RAND函数以从同一数据库连接的原始种子值继续序列。
例如,如果您在SSMS中打开一个新窗口并运行select rand(7),rand(),rand()
然后在单独的查询中(但是相同的窗口,因此相同的连接)运行select rand(),rand(),rand()
,请注意所有六个值。以相同的顺序重复这两个调用,以查看生成完全相同的值,证明原始种子值7确定后3个随机结果,即使它们作为单独的语句运行,因为它们运行于相同的联系。
我想知道这是否会因为连接池而影响.NET框架中看似单独的调用。例如,如果3个拥有3个移动设备的黑客各自快速连续拨打服务器以选择随机抽奖号码,并且.NET对所有这三个使用相同的连接,并且用户能够从这3个号码中识别出整个序列(熟悉RAND的实现),那么他们是否可以预测随后为不同地区的其他用户生成的其他数字,因为RAND如何与连接池中的同一连接相关联?或者,.NET会以某种方式重置调用之间的池化连接,这些连接实际上会在未指定RAND种子时重置RAND种子。
(我不使用兰德,我使用crypt_gen_random,所以这是一个纯粹的学术问题)。