通过T-SQL唯一标识SQL Server计算机

时间:2011-08-09 14:17:54

标签: sql-server tsql uniqueidentifier

我们正在为客户端 - 服务器应用程序开发许可系统,其中唯一的服务器组件是数据库(没有应用程序服务器)。我们希望向特定服务器颁发许可证,这些服务器无法安装在任何其他服务器上或通过备份/恢复传输。我们的想法是通过T-SQL查询生成unqiue标识符,然后使用公共/私有签名返回仅适用于该标识符的激活令牌。

有没有办法以可重复的方式唯一地识别SQL Server,只使用T-SQL(没有CLR存储过程或函数)?例如,安装实例时是否有一些可检索的唯一值?

修改:也许NEWSEQUENTIALID()的MAC部分可行(请参阅this method)。如果系统在群集/故障转移设置中进行故障转移,或者主LAN适配器已更改,则可能会进入“宽限期”,在此期间它将继续运行,直到在新硬件上重新激活为止。问题是这是否“足够独特”。

1 个答案:

答案 0 :(得分:-2)

即使你得到一个唯一的ID,潜在的问题就是在T-SQL上进行验证。数据库未经过验证。如果他们攻击T-SQL并删除激活部分该怎么办?客户是直接使用T-SQL还是使用客户端应用程序。如果您有客户端应用程序,那么为什么CLR不是一个选项。它是可以破解的,但我使用的是一个在安装时生成服务器名称哈希并将其存储在数据库中的应用程序。然后,客户端会将存储的哈希与动态哈希进行比较,以确定它是否在另一台服务器上。问题是,如果服务器名称相同,那么它可能会被击败,并且哈希算法在客户端应用程序上,因此可以将其暴露出来。

Adian我希望我能回答你的问题。

如果你查看sysObjects和其他系统表/视图,我认为你可以找到一些唯一标识服务器和数据库的东西。就像恢复到另一台服务器一样,您必须删除用户并重新创建用户,即使名称相同,内部ID也不同。如果他们恢复了主数据库和应用程序数据库,他们可能会使所有内容完全相同,但他们必须知道这样做。在基本安装上,SQL可能会在某处生成唯一的ID,因为它有意义Microsoft需要复制,其他功能和许可的唯一ID。