【发布时间】:2016-07-11 16:28:41
【问题描述】:
我在 SQL Server 2012 中工作。我正在尝试从用户名中“计算”一个唯一编号,以便在查询中屏蔽其他用户名。我发现了 uniqueidentifier 数据类型,想知道这是否对于每次查询运行都保持静态,即使在不同的机器上也是如此。
例如,如果我们有一个 xyz 的用户名,我正在做一些字符串操作以使用户名与其他用户名不同,然后将其转换为 varbinary :0x78797A。但是,这显然会根据用户名的长度而有所不同。我不希望用户能够看到一个长 varbinary 集并假设(可能正确)它是具有最长用户名的人。
然后我将此 varbinary 转换为 uniqueidentifier 数据类型。运行几次后,看起来这个新值将保持静态,但我不确定这是否是因为我在同一台机器上运行它。无论何时运行或在何处运行,我都需要它是静态的。 uniqueidentifier 是否有可能在任何情况下使用相同的输入产生不同的值?
【问题讨论】:
-
将 varbinary 转换为 uniqueidentifier 是确定性的。但这似乎不是一个有用的方法。您如何处理超过 16 个字符的名称?如果更短,您如何将 varbinary 填充到 16 个字节?零仍将显示长度。 rextester.com/NFTDHM25938
-
@MartinSmith,感谢您提供确定性信息!没错,这不是最有用的方法,但我没有权限使用 SQL Server 的某些允许其他类型加密的功能。就我的目的而言,16 个字符的限制不会成为问题,并且显示长度的零 的相关性比我想象的要小。感谢您的反馈!
-
请注意,任何散列函数(即使是长度像 SHA2_512 的散列函数)都有可能发生冲突
标签: sql sql-server