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



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

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

Edit:也许NEWSEQUENTIALID()的MAC部分会工作(参见此方法)。如果系统在集群/故障转移设置中发生了故障转移,或者主LAN适配器发生了更改,那么它可能会进入一个"宽限期",在此期间它将继续运行,直到在新硬件上重新激活为止。问题是这是否"足够独特"。

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

我希望我能感谢你回答我的问题。

如果你查看sysoobjects和其他系统表/视图,我认为你可以找到一些唯一标识服务器和数据库的东西。就像在还原到另一个服务器上一样,您必须删除用户并重新创建用户,即使名称相同,内部id不同。如果他们恢复主数据库和应用程序数据库,他们可能能够使所有内容相同,但他们必须知道要这样做。在基本安装中,SQL可能会在某个地方生成一个唯一的id,因为微软可能需要一个用于复制、其他功能和许可的唯一id。

相关内容

最新更新