安装完成后如何找回SQL Server实例安装时的序列号
当需要再次安装SQL Server时,如果序列号找不到了,可以试着从已经安装的实例里找回序列号,因为安装完SQL Server后,序列号(Product Key)被保存在注册表里; MSDN订阅下载的安装包是内置序列号的,则没有这个困扰。
通过无文档记载的扩展存储过程xp_regread读取注册表: 不要被ProductCode迷惑,就算只安装了SQL Server客户端,注册表里也会有这个键值,并不是序列号,DigitalProductID才是,但经过了Base24编码,需要解码才行。 可以看到,对于不同版本,注册表的路径不一样,但是键是一致的。 Express版是免费的,没有序列号,从而注册表也没DigitalProductID这个键。
1. Base24,Base64 编码简介可能很多人听说过Base64编码,它用于对比较长的字符串进行编码,以方便传输; Base24编码主要应用在序列号生成上,两者的实现思路是类似的,只是编码的模式有点变化。 Base64所对应的编码表是: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= 共计64个字符。 Base24所对应的编码表是: BCDFGHJKMPQRTVWXY2346789 共计24个字符,这里主要去掉了一些对于序列号来说不容易识别和容易混淆的字符。 SQL Server的序列号采用的是Base24编码,对编码后的字符进行解码,即可以得到原文。 编码/解码并不是加密/解密,没有秘钥的说法,只有字符转换的规则,Base24,Base64详细的算法可以在网上找到。 2. 利用Powershell 解码以下powershell函数用于解码/找回SQL Server序列号,在SQL Server 2008,2008 R2实例上测试通过: SQL Server 2012序列号里字符的格式发生了变化,$binArray = ($data.uValue)[0..16] 不同于SQL Server 2008的$binArray = ($data.uValue)[52..66],同时别忘了改下注册表路径$regPath = "SOFTWAREMicrosoftMicrosoft SQL Server110ToolsSetup",修改后如下,在SQL Server 2012实例上测试通过: 3. 调用powershell函数并输出序列号打开powershell,把上面的函数贴进去,回车,输入Get-SQLServerKey 并回车; 或者把上面的函数存为.ps1文件直接引用: . C:UsersusernameDesktoppk.ps1 PS C:Windowssystem32> Get-SQLserverKey输出结果如下,首尾几个字符被人为改成星号,没有贴出来。 对于SQL Server 2000,2005,由于手头没有环境,没有测试;对于Office,Windows系统,应该也都可以通过类似的方式拿到序列号。 以上内容就是关于安装完成后如何找回SQL Server实例安装时的序列号,希望大家有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |